2013-01-14 52 views
0

我想將此C++函數移植到NASM。將c函數移植到NASM

DWORD WINAPI Generic(LPVOID lpParameter) { 
    __asm { 
     mov eax, [lpParameter] 
     call eax 
     push 0 
     call ExitThread 
    } 
    return 0; 
} 

我瞭解如何lpParameter參數在這裏工作的一些問題,我已經和的錯誤,當我編譯這個在NASM。

這是我當前的代碼:

BITS 32 
global _start 

_start: 
mov eax, [lpParameter] 
call eax 
push 0 
call exitfunk 

exitfunk: 
mov ebx, 0x0A2A1DE0 
push 0x9DBD95A6 
call ebp 
cmp al, byte 6 
jl short goodbye 
cmp bl, 0xE0 
jne short goodbye 
mov ebx, 0x6F721347 
goodbye: 
push byte 0 
push ebx 
call ebp 

任何一個能幫助我嗎?

+1

所以更換此

mov eax, [lpParameter] 

,第一,這將有助於瞭解你所得到的錯誤... –

+1

我想象錯誤是lpParameter未定義。上面例子中的編譯器通過解析這些變量並允許在C和ASM中混合使用引用幫助了很多。我也想象lpParameter是C函數的地址,所以__asm代碼將地址放入EAX中,然後通過EAX調用它。 –

+0

對不起,這就像標記所說的,lpParameter是未定義的,函數做到了。 – jsilva

回答

0

IIRC,NASM不支持命名函數參數,因此您必須從寄存器或堆棧手動提取參數。 AFAIR,所有的Win32 API函數期望在棧上的參數,所以你應該與此

mov eax, [esp+4] 
+0

謝謝alexey,這是完美的工作。 :) – jsilva