Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 | 5 |

 

  Вопрос: Адрес функции Добавлено: 14.11.05 21:29  

Автор вопроса:  Yurio

Ответить

  Ответы Всего ответов: 73  

Номер ответа: 16
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #16
Добавлено: 15.11.05 05:48
А в байтовом массиве Long нужен как big-endian или little-endian? :)

Ответить

Номер ответа: 17
Автор ответа:
 Yurio



Вопросов: 2
Ответов: 31
 Профиль | | #17 Добавлено: 15.11.05 09:00
BYTE* - это на 32-битных процессорах таки Long


Что тогда по-твоему LONG*, jmp_far* ?
Речь шла о IDL, если ты не понял.

А * - это указатель


приплюсовать


Да не приплюсовывать.
Реализовать надо вот это:

push <Адрес функции>
ret

Т.е. надо записать команду перехода на эту функцию.
Пока не работает.

Ответить

Номер ответа: 18
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #18 Добавлено: 15.11.05 11:29
2Yurio Указатель типа BYTE?
Всё, сползаю под стол...
Слух, а мож ты для калькулятора софт пишешь? А люди тут прикалываются :)

Ответить

Номер ответа: 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. Если есть что добавить, пиши в соседнюю.

Ответить

Номер ответа: 21
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #21
Добавлено: 15.11.05 12:39
Где я это сказал???

Видишь звездочку!? Это означает что это указатель!

Да хоть под стул ...

Я уже там :))) Смотреть тему указателей, срочна :)

Просто при использовании * параметр передается по ссылке, что мне и нужно было. И вопрос этот давно решен, все работает.

Кроме тебя...

Ответить

Номер ответа: 22
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #22
Добавлено: 15.11.05 12:41
Где я это сказал???

Видишь звездочку!? Это означает что это указатель!

Да хоть под стул ...

Я уже там :))) Смотреть тему указателей, срочна :)

Просто при использовании * параметр передается по ссылке, что мне и нужно было. И вопрос этот давно решен, все работает.

Кроме тебя...

Ответить

Номер ответа: 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


Где правда-то?

Ответить

Номер ответа: 24
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #24 Добавлено: 15.11.05 13:43
Специально сравнил этот код с кодом GSerg. Машина различий не заметила. Ну я, правда, на писишке сравнивал, а кто знает как там на калькуляторах...
Флейм и флуд.

А вот это точно.
Если уж другим не веришь - почитай хелп что ли. F1 вверху слева.
BYTE* - указатель на параметр типа BYTE, само значение которого (указателя) - Long! И никак иначе. И получать адрес функции в виде байтового массива - параноидальный бред. Вот так.
Ладно, я снова пополз под стул :)

Ответить

Номер ответа: 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 - тоже бред.

Ответить

Номер ответа: 26
Автор ответа:
 Yurio



Вопросов: 2
Ответов: 31
 Профиль | | #26 Добавлено: 15.11.05 15:21
Интересно было бы найти в этом коде указатель.
Ау, знатоки!

Ответить

Номер ответа: 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. О указателях, надеюсь, всё.

Ответить

Номер ответа: 30
Автор ответа:
 Yurio



Вопросов: 2
Ответов: 31
 Профиль | | #30 Добавлено: 15.11.05 15:51
Ты случайно VB с С++ не перепутал?
Надо так:


Declare Function ReadProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As Long, _
ByRef lpBaseAddress As Any, _
ByRef lpBuffer As Any, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesWritten As Long) As Long


Если использовать это, а не *.tlb, то и вопроса бы не было (только это ДРУГАЯ тема, на 10 см ниже).

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам