2013-01-24 220 views
1

我在組裝的第一次嘗試。我跳過的HelloWorld,並決定只言歸正傳,做一個CRC32Checksum:L聲明函數

現在我很迷茫哈哈..

我嘗試:

format PE console        ;Format PE OUT GUI 4.0 
entry main 

include 'macro/import32.inc' 

section '.idata' import data readable   ;Import Section. 
library msvcrt,'msvcrt.dll' 
import msvcrt, printf, 'printf',\ 
exit,'exit', getchar, 'getchar' 

section '.data' data readable writeable   ;Constants/Static Section. 
InitialValue dd 0 

section '.code' code readable executable 
main: 
    jmp CRC32Checksum  ;I want to change this to a call [CRC32Checksum].. 
    call [getchar] 
    mov eax, 0 
    ret 0 


CRC32Checksum: 
    push ebx 
    mov ebp, esp 
    mov eax, InitialValue 
    NOT eax 
    pop ebx 
ret 

如何調用我的CRC32Checksum?我是否在正確的軌道上?我如何在程序集中聲明函數?

+0

我想用參數聲明函數。 – Brandon

回答

2

只需使用:

call CRC32Checksum 

在FASM當你在括號方括號中的東西就意味着間接尋址。 「調用[CRC32Checksum]」表示「調用地址位於CRC32Checksum變量的過程,實際上,由於標籤CRC32Checksum是代碼標籤並且沒有指定大小,因此您將得到編譯器錯誤」未指定操作數大小「。 (你可以用「call dword [CRC32Checksum]」來覆蓋它,但這裏當然沒有意義)

請注意,你可以通過間接調用來調用導入的函數「getchar」,這是因爲導入的函數實際上是雙字包含導入函數地址的變量。

0

扁平彙編程序網站有Windows編程指南。它已經得到documentation如何使用宏的proc程序。

或者只是call一個標籤,通過堆棧或寄存器提供參數給例程,無論您希望如何。