作者: luckiejacky 時間: 2016-8-16 13:43 標題: Assembly (NASM)問題
本帖最後由 luckiejacky 於 2016-8-16 13:49 編輯
- SECTION .data
- msg: db "Hello world, this is assembly",10,0
- SECTION .text
- extern _printf
- global main
- main:
- push ebp
- mov ebp, esp
-
- push msg
- call _printf
-
- mov esp, ebp
- pop ebp
- ret
- nasm -f win32 -o test_asm.obj test_asm.asm
- link test_asm.obj kernel32.lib libcmt.lib /SUBSYSTEM:Console /EntryPoint:main
作者: luckiejacky 時間: 2016-8-16 15:57
http://www.idabook.com/scripts/generate_nasm.idc
用緊Lee條script,但佢唔會自動generate data variables?
- sub_1015CD_.asm:8: error: symbol `aCommdlg_coloro' undefined
- sub_1015CD_.asm:9: error: symbol `__imp__RegisterWindowMessageW@4' undefined
- sub_1015CD_.asm:10: error: symbol `dword_1040508' undefined
- sub_1015CD_.asm:13: error: symbol `aCommdlg_setrgb' undefined
- sub_1015CD_.asm:14: error: symbol `__imp__RegisterWindowMessageW@4' undefined
- sub_1015CD_.asm:15: error: symbol `dword_104050C' undefined
作者: gilbertluis 時間: 2016-8-18 15:05
沒用過nasm, 但可能同calling convention有關, printf calling convention係cdecl, push parameter 由右到左, caller 要還原esp , 但printf 是variable argument, 不知有沒有特別不同.
其他常見的calling convention : stdcall, fastcall, pascal, thiscall.
作者: wai0731 時間: 2016-8-30 12:02
會不會是第15行 push msg後,在第19行pop 錯?
