2012-08-17 66 views
0

我是meta-pc彙編程序的新手,我需要逆轉某些功能的幫助。 這裏是功能,這是我需要儲備:從meta-pc組件獲取函數參數類型和返回的類型

public function 

var_80  = byte ptr -80h 
arg_0  = dword ptr 8 
arg_4  = dword ptr 0Ch 

    push ebp 
    mov ebp, esp 
    and esp, 0FFFFFFF8h 
    sub esp, 80h 
    mov eax, [ebp+arg_4] 
    cmp eax, 80h 
    push esi 
    push edi 
    jl short loc_100032DD 
    mov eax, 7Fh 

loc_100032DD:   ; CODE XREF: c4atoi+16j 
    mov esi, [ebp+arg_0] 
    mov ecx, eax 
    mov edx, ecx 
    shr ecx, 2 
    lea edi, [esp+88h+var_80] 
    rep movsd 
    mov ecx, edx 
    and ecx, 3 
    rep movsb 
    mov [esp+eax+88h+var_80], 0 
    lea eax, [esp+88h+var_80] 
    push eax  ; char * 
    call j__atol 
    add esp, 4 
    pop edi 
    pop esi 
    mov esp, ebp 
    pop ebp 
    retn 8 
function  endp 

所以,我需要得到數量和功能參數的類型和返回類型。我怎麼能得到它?

+0

什麼是「meta-pc彙編程序」?我GOOGLE了,但我只是在其他網站上發現這個問題。http://wololo.net/talk/viewtopic.php?p=159427 – harold 2012-08-17 18:31:51

+0

當你說類型,你是什麼意思?我看到關於char *的評論,我認爲這意味着你需要C型。 – AlexLordThorsen 2012-08-17 18:33:47

+0

'arg_4'是一個描述字符串長度的整數,'arg_0'是一個指向該字符串的指針。我無法確定它返回的是什麼,因爲'j__atol'返回值。通過它的名稱/外觀,雖然它將返回一個int,可能是輸入字符串的整數表示形式。 – harold 2012-08-17 18:36:35

回答

1

該函數是基於對j__atol函數和atol函數的調用的引用將字符串轉換爲整數的代碼。功能說明:

調用約定:
stdcall

第一個參數(arg_0):空結尾的字符串
地址。

第二個參數(arg_4):
指定字符串的長度。只處理前127個字符。

返回值:
EAX寄存器。

+0

所以,arg_的數量是參數的數量,對吧?但我怎樣才能獲得參數類型和返回類型? arg_0是dword,這意味着它有4個字節長,所以我有點困惑... – Kuci 2012-08-17 19:08:33

+0

* arg_N *中的* N *是當前堆棧幀(EBP + N)中的相對偏移量。對於32位代碼,N是(應該)是4個字節的倍數,從零開始(第一個參數)。您需要了解該函數如何解釋參數。由於它調用* atol *,因此可以在函數引用中查找它以查找其參數和類型。一種回溯。 – Jay 2012-08-17 19:18:14