月上梦之恋【NASM】是一款源码调试:使用工具nasm,nasm可以出编译许多平台的下的执行文件。从调试的角度来看,使用GAS的好处是可以在生成的目标代码中包含符号表(symbol table),这样就可以使用 GDB
比如我们拿中文版的植物大战僵尸CALL僵尸:
//[参数] [常量] 用法
pushad
push [参数]
push [参数]
mov eax,[变量]
mov esi,0x40DDC0
call esi
popad
ret
//转换结果
pushad
push dword [ebp+0x08]
push dword [ebp+0x0C]
mov eax,dword [ebp-0x04]
mov esi,0x40DDC0
call esi
popad
ret
以前找的一个游戏的CALL
原型基本上就是下面那个样子
mov ecx, dword[ebp+0x14]
mov edx, dword[ebp+0x18]
sub esp, 0x10
mov eax, esp
mov dword[eax], ecx
mov ecx, dword[ebp+0x1c]
mov ebx, dword[esi+0x00000d20]
mov dword[eax+0x04], edx
mov edx, dword[ebp+0x20]
mov dword[eax+0x08], ecx
mov ecx, dword[ebp+0x30]
mov dword[eax+0x0c], edx
mov eax, dword[ebp+0x34]
mov edx, dword[ebp+0x2c]
push eax
mov eax, dword[ebp+0x28]
push ecx
mov ecx, dword[ebp+0x24]
push edx
mov edx, dword[ebp+0x10]
push eax
mov eax, dword[ebp+0x0c]
push ecx
mov ecx, dword[ebp+0x08]
push 0x00000032 分数
push 0x000001cc x坐标
push 0x000003cc y坐标
mov eax, 0x1143FA58 基址
mov ebx, 0x006d7740
call ebx
那么我们直接这样写
mov ecx, dword[ebp+0x14]
mov edx, dword[ebp+0x18]
sub esp, 0x10
mov eax, esp
mov dword[eax], ecx
mov ecx, dword[ebp+0x1c]
mov ebx, dword[esi+0x00000d20]
mov dword[eax+0x04], edx
mov edx, dword[ebp+0x20]
mov dword[eax+0x08], ecx
mov ecx, dword[ebp+0x30]
mov dword[eax+0x0c], edx
mov eax, dword[ebp+0x34]
mov edx, dword[ebp+0x2c]
push eax
mov eax, dword[ebp+0x28]
push ecx
mov ecx, dword[ebp+0x24]
push edx
mov edx, dword[ebp+0x10]
push eax
mov eax, dword[ebp+0x0c]
push ecx
mov ecx, dword[ebp+0x08]
push [参数]
push [参数]
push [参数]
mov eax,[变量]
mov ebx, 0x006d7740
call ebx
那么我们在编程传递的时候,就要传递三个参数 一个变量 这儿我用的是易语言
1.去除无用功能 [去除窗口边框] [还原窗口边框] [窗口隐藏/还原] [窗口侧边]
2.汇编代码结构重构:增加快捷转换 [参数] [变量]