Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

вопрос по BASM   Найти похожие ветки 

 
ph0sgen ©   (2006-11-04 01:21) [0]

Доброго времени суток, уважаемые мастера.

у меня такой вопрос:
мне очень нужно вставить следующую вставку:


       ...
       ASSUME  edx: ptr IMAGE_EXPORT_DIRECTORY

       mov     edx, [esi + 078h]
       add     edx, hModule
       mov     ebx, [edx].AddressOfNames
       add     ebx, hModule
       ...


но встроенный ассемблер не понимает ASSUME. чем аналогичным можно это заменить? очень нужно.

благодарю за внимание.


 
Дмитрий Белькевич ©   (2006-11-04 03:09) [1]

Список экспорта хочешь получить?


 
ph0sgen ©   (2006-11-04 05:33) [2]

пытаюсь сделать аналог GetProcAddress


 
Сергей М. ©   (2006-11-04 10:20) [3]


> пытаюсь сделать аналог GetProcAddress


Так это не делается.


 
Ketmar ©   (2006-11-04 23:16) [4]

а лучше никак не делать. потому что с асмом вопрошающий явно незнаком.


 
Джо ©   (2006-11-05 02:46) [5]

Вот если бы еще кто (прямо тут) объяснил смысл делания "аналога" GetProcAddress на BASM, так это было бы просто дивно, чудно и крайне полезно.


 
Германн ©   (2006-11-05 02:49) [6]


> Джо ©   (05.11.06 02:46) [5]
>
> Вот если бы еще кто (прямо тут) объяснил смысл делания "аналога"
> GetProcAddress на BASM, так это было бы просто дивно, чудно
> и крайне полезно.
>

Насчёт "полезности" есть сомнения.


 
Джо ©   (2006-11-05 03:09) [7]

> [6] Германн ©   (05.11.06 02:49)
>
> > Джо ©   (05.11.06 02:46) [5]
> >
> > Вот если бы еще кто (прямо тут) объяснил смысл делания
> "аналога"
> > GetProcAddress на BASM, так это было бы просто дивно,
> чудно
> > и крайне полезно.
> >
>
> Насчёт "полезности" есть сомнения.

Полезность есть продукт при полном удовлетворении сторон :D А ежели стороны довольны, то и топика нет, и вопроса нет — в итоге, все довольны :)


 
Германн ©   (2006-11-05 03:35) [8]


> Джо ©   (05.11.06 03:09) [7]

Ну копирайт не помешал бы тут! :-). ИИ,ЕП всё-таки заслуживают подобного отношения к себе.
А так - согласен. :-)


 
Ketmar ©   (2006-11-05 03:59) [9]

>[8] Германн(c) 5-Nov-2006, 03:35
>Ну копирайт не помешал бы тут! :-).
и так все знают. а кто не знает -- тому эцих.


 
Джо ©   (2006-11-05 04:41) [10]

[8] Германн
> Ну копирайт не помешал бы тут! :-).

Не буду же я ставить копирайт перед исковерканной (под свои нужды) цитатой? А так:  [9] Ketmar :)


 
jack128(not home)   (2006-11-05 20:18) [11]


> Вот если бы еще кто (прямо тут) объяснил смысл делания "аналога"
> GetProcAddress на BASM, так это было бы просто дивно, чудно
> и крайне полезно.

Ну как вариант, получение реального адреса вызова функции как метод противостояния перехвату АПИ :) Кстати достаточно часто встречающаяся задачка в определенных кругах :)


 
Rouse_ ©   (2006-11-05 20:18) [12]

Пардон, последний пост мой :)


 
Ketmar ©   (2006-11-05 20:28) [13]

>[12] Rouse_(c) 5-Nov-2006, 20:18
>Пардон, последний пост мой :)
опа...


 
Anatoly Podgoretsky ©   (2006-11-05 20:50) [14]

> Rouse_  (05.11.2006 20:18:12)  [12]

Вы там скучковались?
Ну так выпейти и за нас.
На здоровье.


 
Германн ©   (2006-11-06 02:21) [15]


> Rouse_ ©   (05.11.06 20:18) [12]
>
> Пардон, последний пост мой :)

Т.е. Александр из Москвы "не долетевший на самолёте до Москвы", считается Евгением из Мытищ не доползшим до дома? :-)


 
Rouse_ ©   (2006-11-06 17:11) [16]

Женька просто в отпуске жил у меня в квартире, во избежание и чтоб лампочки по вечерам в квартире моргали периодически ;)


 
Rouse_ ©   (2006-11-06 17:18) [17]

А во поводу нахождения адреса:

;---------------- Base ---------------

proc  Base
dw 0a164h,0030h,0000h
mov eax, [eax+0Ch]
mov esi, [eax+1Ch]
lodsd
mov eax, [eax+08h]
ret
endp
;-------------- GetAddress -------------------------
proc   GetAddress Base,Function

local  OptionalHeader:DWORD
local  ExportDirectory:DWORD
local  NumberOfNames:DWORD
local  nOrdinal:WORD
push ebx edi esi edx ecx
mov ebx,[Base]
add ebx,3ch
mov ebx,[ebx]
add ebx,18h
add ebx,[Base] ;--- ebx - Optional Header
mov [OptionalHeader],ebx
add ebx,60h
mov ebx,[ebx]
add ebx,[Base];--- ebx - Export Directory
mov [ExportDirectory],ebx
add ebx,20h
mov edi,[ebx];--- edi - ExportDirectory->AddressOfNames
add ebx,4h
mov esi,[ebx];--- esi - ExportDirectory->AddressOfNamesOrdinal
add edi,[Base]
add esi,[Base]
mov edx,[ExportDirectory]
add edx,18h
mov edx,[edx]
mov [NumberOfNames],edx
xor ecx,ecx
mov ecx,edx
f10:
xor edx,edx
mov edx,[edi]
add edx,[Base];edx - NameOfFunction
push edx
push [Function]
call strcmp
test eax,eax
jz   f30
add edi,4h
add esi,2h
loop f10
xor  eax,eax
pop ecx edx esi edi ebx
ret
f30:
xor  ecx,ecx
mov  cx,word[esi]
mov  [nOrdinal],cx

mov  eax,[Base]
mov  edi,[ExportDirectory]
add  edi,1ch
mov  edi,[edi]
add  edi,eax
imul ecx,ecx,4
add  edi,ecx
mov  ebx,[edi]
add  eax,ebx
pop ecx edx esi edi ebx
ret
endp


Единсдвенный минус, вот это:

dw 0a164h,0030h,0000h
mov eax, [eax+0Ch]

под 98 не сработает, а так для NT самое оно :)

Параметры вызова - адрес библиотеки и имя функции :)


 
ph0sgen ©   (2006-11-07 17:49) [18]

спасибо Rouse_. обязательно попробую ваш вариант.

лично я пытался вставить такой код:


function GetProcAddressEx(hModule: DWORD; szProcName: PChar) : Pointer; assembler;

asm
       mov     esi, hModule
       cmp     word ptr [esi], IMAGE_DOS_SIGNATURE
       jnz     @not_found

       add     esi, dword ptr [esi + 3ch]
       cmp     word ptr [esi], IMAGE_NT_SIGNATURE
       jnz     @not_found

       assume  edx: ptr IMAGE_EXPORT_DIRECTORY

       mov     edx, [esi + 078h]
       add     edx, hModule
       mov     ebx, [edx].AddressOfNames
       add     ebx, hModule

@l00p:
       mov     edi, [ebx]
       add     edi, hModule
       mov     esi, szProcName
       push    ecx
       repe    cmpsb
       je      @found
       pop     ecx
       add     ebx, 4
       inc     eax
       cmp     [edx].NumberOfNames, eax
       jne     @l00p

       jmp     @not_found

@found:
       pop     ecx
       mov     ecx, hModule
       mov     esi, ecx
       add     ecx, [edx].AddressOfNameOrdinals

       lea     eax, [ecx + 2*eax]
       movzx   eax, word ptr [eax]
       lea     eax, [esi + 4*eax]
       add     eax, [edx].AddressOfFunctions

       mov     eax, [eax]
       add     eax, esi
       ret

       assume  edx: nothing

@not_found:
       xor eax, eax
       ret
end;


единственное в начале мне хотелось бы заменить assume.


 
Ketmar ©   (2006-11-07 18:15) [19]

>[18] ph0sgen(c) 7-Nov-2006, 17:49
>единственное в начале мне хотелось бы заменить assume.
предлагаю всё-таки сменить моск.


 
Rouse_ ©   (2006-11-07 22:27) [20]

Ыц.. красиво, а кто вас так учил выставлять сегментный регистр?
assume  edx: ptr IMAGE_EXPORT_DIRECTORY


 
Ketmar ©   (2006-11-07 22:53) [21]

>[20] Rouse_(c) 7-Nov-2006, 22:27
>Ыц.. красиво, а кто вас так учил выставлять сегментный
>регистр?
TASM/MASM, вестимо. и кривые руководства. я же говорю -- моск сменить надо.



Страницы: 1 вся ветка

Текущий архив: 2007.03.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.036 c
1-1169892943
delphi_
2007-01-27 13:15
2007.03.25
помогите с регулярным выражением (TRegExpr)


2-1172676429
Slimer
2007-02-28 18:27
2007.03.25
TQuery


8-1153917194
BadTester
2006-07-26 16:33
2007.03.25
Как из Image сделать полноценную кнопку?


2-1172482647
SpellCaster
2007-02-26 12:37
2007.03.25
Глобальные переменные в нитях


15-1172546650
Slider007
2007-02-27 06:24
2007.03.25
С днем рождения ! 27 февраля