Страница: 1 | 2 | 3 | 4 | 5 |
|
Вопрос: Адрес функции
|
Добавлено: 14.11.05 21:29
|
|
Номер ответа: 17 Автор ответа: Yurio
Вопросов: 2 Ответов: 31
|
Профиль | | #17
|
Добавлено: 15.11.05 09:00
|
BYTE* - это на 32-битных процессорах таки Long
Что тогда по-твоему LONG*, jmp_far* ?
Речь шла о IDL, если ты не понял.
А * - это указатель
приплюсовать
Да не приплюсовывать.
Реализовать надо вот это:
push <Адрес функции>
ret
Т.е. надо записать команду перехода на эту функцию.
Пока не работает.
Ответить
|
Номер ответа: 19 Автор ответа: GSerg
Вопросов: 0 Ответов: 1876
|
Профиль | | #19
|
Добавлено: 15.11.05 12:09
|
Что тогда по-твоему LONG*, jmp_far* ?
Нет, LONG* - это не jmp_far*, это Long (на 32-битных процесорах).
Речь шла о IDL, если ты не понял.
Если не понял ты, на vbstreets ты задал тот же вопрос про tlb и неправильно объявленную функцию, просто ответил не я, а tyomitch.
Мы везде. Мы следим за тобой.
Короче.
Yurio.
У тебя в голове жуткая каша по теме "Указатели".
Устрани сначала кашу. Всё остальное в результате придёт само.
Ответить
|
Номер ответа: 20 Автор ответа: Yurio
Вопросов: 2 Ответов: 31
|
Профиль | | #20
|
Добавлено: 15.11.05 12:34
|
Указатель типа BYTE
Где я это сказал???
сползаю под стол
Да хоть под стул ...
LONG* - это не jmp_far*
А кто спорит? Ты, наверное, запятую не заметил.
Просто при использовании * параметр передается по ссылке, что мне и нужно было. И вопрос этот давно решен, все работает.
ответил не я
Вот именно - не ты.
И вообще, зачем писать в эту тему по поводу *.tlb. Если есть что добавить, пиши в соседнюю.
Ответить
|
Номер ответа: 23 Автор ответа: Yurio
Вопросов: 2 Ответов: 31
|
Профиль | | #23
|
Добавлено: 15.11.05 12:47
|
жуткая каша
для калькулятора софт
и т.п.
Флейм и флуд.
По ТЕМЕ кто-нибудь напишет?
Кстати, этот код дает другие результаты:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetProcAddress Lib "kernel32" ( ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" ( ByVal lpModuleName As String) As Long
Private Sub Form_Load()
Dim b() As Byte
Dim adr As Long
adr = GetProcAddress(GetModuleHandle("user32.dll" , "MessageBoxA"
ReDim b(0 To 3)
CopyMemory b(0), adr, 4
End Sub
Где правда-то?
Ответить
|
Номер ответа: 25 Автор ответа: Yurio
Вопросов: 2 Ответов: 31
|
Профиль | | #25
|
Добавлено: 15.11.05 15:08
|
Да знаю я, что значение указателя - Long
И никак иначе
sne
Кроме тебя...
Грубо и безосновательно.
Работает отлично:
Dim cProc As Long, aMSGBA As Long, oldData() As Byte
cProc = GetCurrentProcess
aMSGBA = GetProcAddress(GetModuleHandle("user32.dll" , "MessageBoxA"
ReDim oldData(5)
ReadProcessMemory cProc, aMSGBA, oldData(0), 6&, 0&
Что по-твоему находится в oldData(0), oldData(1), ..., oldData(5) ? Случайно не первые 6 байт MessageBoxA ?
GSerg
И где я переделываю Long в байтовый массив ?
Теперь по ТЕМЕ
LamerOnLine
параноидальный бред
Ты что, серьёзно считаешь, что нельзя получить эти 4 байта ?
А зачем тогда коды сравнивал ?
Тогда ведь и код GSerg - тоже бред.
Ответить
|
Номер ответа: 27 Автор ответа: LamerOnLine
ICQ: 334781088
Вопросов: 108 Ответов: 2822
|
Профиль | | #27
|
Добавлено: 15.11.05 15:33
|
Ты что, серьёзно считаешь, что нельзя получить эти 4 байта ?
Вопрос был в другом - ЗАЧЕМ?
Интересно было бы найти в этом коде указатель.
Куда интереснее было бы найти здесь мотивацию
Как получить адрес этой же функции в виде 4 переменных типа Byte ?
Но, думаю, уже вряд ли удастся
Ответить
|
Номер ответа: 28 Автор ответа: LamerOnLine
ICQ: 334781088
Вопросов: 108 Ответов: 2822
|
Профиль | | #28
|
Добавлено: 15.11.05 15:40
|
И для полноты картины
The ReadProcessMemory function reads data from an area of memory in a specified process. The entire area to be read must be accessible, or the operation fails.
BOOL ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesRead
);
Parameters
hProcess
[in] Handle to the process whose memory is being read. The handle must have PROCESS_VM_READ access to the process.
lpBaseAddress
[in] Pointer to the base address in the specified process from which to read. Before any data transfer occurs, the system verifies that all data in the base address and memory of the specified size is accessible for read access. If this is the case, the function proceeds; otherwise, the function fails.
lpBuffer
[out] Pointer to a buffer that receives the contents from the address space of the specified process.
nSize
[in] Number of bytes to be read from the specified process.
lpNumberOfBytesRead
[out] Pointer to a variable that receives the number of bytes transferred into the specified buffer. If lpNumberOfBytesRead is NULL, the parameter is ignored.
Как Pointer переводится, надеюсь, знаешь
Ответить
|
Номер ответа: 29 Автор ответа: Yurio
Вопросов: 2 Ответов: 31
|
Профиль | | #29
|
Добавлено: 15.11.05 15:44
|
WriteProcessMemory cProc, aMSGBA, newData(0), 6&, 0&
newData содержит &H68, &HC3 и эти 4 байта
Понял?
BYTE* - указатель на параметр типа BYTE, само значение которого (указателя) - Long!
Когда я в этом сомневался?
P.S. О указателях, надеюсь, всё.
Ответить
|
Страница: 1 | 2 | 3 | 4 | 5 |
Поиск по форуму