#1 13-08-2011 16:55

RDH
From: Энгельс
Registered: 09-01-2010
Posts: 65

Разбор процедуры

Имеется процедура (Vice City):

.text:005FC980     ; =============== S U B R O U T I N E =======================================
.text:005FC980
.text:005FC980
.text:005FC980     CRadio__SetRadioStation proc near       ; CODE XREF: CAudio__SetRadiostation+16p
.text:005FC980
.text:005FC980     arg_0           = dword ptr  4
.text:005FC980     arg_4           = dword ptr  8
.text:005FC980
.text:005FC980 000                 push    ebx
.text:005FC981 004                 mov     ebx, ecx
.text:005FC983 004                 cmp     byte ptr [ebx], 0
.text:005FC986 004                 mov     edx, [esp+4+arg_0]
.text:005FC98A 004                 mov     eax, [esp+4+arg_4]
.text:005FC98E 004                 jz      short loc_5FC9CB
.text:005FC990 004                 cmp     edx, 9
.text:005FC993 004                 jnz     short loc_5FC99A
.text:005FC995 004                 mov     edx, 0Ah
.text:005FC99A
.text:005FC99A     loc_5FC99A:                             ; CODE XREF: CRadio__SetRadioStation+13j
.text:005FC99A 004                 cmp     edx, 23
.text:005FC99D 004                 ja      short loc_5FC9CB
.text:005FC99F 004                 cmp     eax, 0FFFFFFFFh
.text:005FC9A2 004                 mov     byte ptr [ebx+3978h], 1
.text:005FC9A9 004                 mov     [ebx+3979h], dl
.text:005FC9AF 004                 jz      short loc_5FC9C4
.text:005FC9B1 004                 mov     ecx, edx
.text:005FC9B3 004                 xor     edx, edx
.text:005FC9B5 004                 lea     ecx, [ecx+ecx*2]
.text:005FC9B8 004                 div     dword ptr [ebx+ecx*4+10h]
.text:005FC9BC 004                 mov     [ebx+397Ch], edx
.text:005FC9C2 004                 jmp     short loc_5FC9CB
.text:005FC9C4     ; ---------------------------------------------------------------------------
.text:005FC9C4
.text:005FC9C4     loc_5FC9C4:                             ; CODE XREF: CRadio__SetRadioStation+2Fj
.text:005FC9C4 004                 or      dword ptr [ebx+397Ch], 0FFFFFFFFh
.text:005FC9CB
.text:005FC9CB     loc_5FC9CB:                             ; CODE XREF: CRadio__SetRadioStation+Ej
.text:005FC9CB                                             ; CRadio__SetRadioStation+1Dj
.text:005FC9CB                                             ; CRadio__SetRadioStation+42j
.text:005FC9CB 004                 pop     ebx
.text:005FC9CC 000                 retn    8
.text:005FC9CC     CRadio__SetRadioStation endp

Вопрос: как узнать процедура/функция ли это, тип вызова (cdecl, stdcall ....).
И ещё: у этой процедуры два параметра: 1 - DWORD, 2 - WORD. Правильно определил или нет?

Last edited by RDH (13-08-2011 16:55)


programmer.png
modder.jpg

Offline

#2 14-08-2011 22:01

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 937
Website

Re: Разбор процедуры

Как отвечать на такие вопросы написано здесь: http://sannybuilder.com/forums/viewtopic.php?id=941
В данном случае CRadio__SetRadioStation proc является методом. Помимо параметра, записанного в ecx, передаётся ещё два параметра (arg_0 и arg_4), представляющие собой 4-х байтовые целые числа (dword).

Offline

#3 15-08-2011 09:55

RDH
From: Энгельс
Registered: 09-01-2010
Posts: 65

Re: Разбор процедуры

Т.е. это thiscall, и в delphi ее можно вызвать только через ассемблер?


programmer.png
modder.jpg

Offline

#4 17-09-2011 05:14

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Разбор процедуры

Да можно вызывать!

Offline

Board footer

Powered by FluxBB