从VC的反汇编复制代码到自己的汇编
很多同学都想自己写一些汇编的程序,但是往往比较复杂的函数用汇编实现起来比较麻烦,有时希望编写自己的主要逻辑,而不想去重新实现已有的逻辑,这样可以有多种办法:我们讲的是其中的一种,将可以编译的C程序转换成汇编代码
(2)运行的时候查看反汇编,要去掉字节码,保留地址,语句可选,将其复制到文本文件中
(3)修改代码:如果选择了语句则将这些语句前面加上分号注释掉
(4)根据跳转指令后面的括号内地址确定跳转的地方,比如jmp FN+0x22(33445566h),找到地址=33445566的那个行前面写上FN_33445566h,“jmp FN+0x22(33445566h)”改写为jmp FN_33445566h
(5)修正转移地址后,删除所有的地址码
(6)开始修正参数如dword ptr[user],根据参数表和调用约定确定user的位置,如esp+4h 或ebp+4h,需要注意的是如果使用esp+X的方式要从函数头开始看,到引用处之间的push、 add esp、 sub esp等操作,重新确定相对esp的地址
(7)添加汇编其他框架代码:
.code;
public FN;
FN proc;
你的代码
FN endp;
END;
(8)保存asm文件,添加到VC的工程中,右键文件属性:自定义生成步骤:命令行"ml(64) /Fo $(OUTDIR)\FNasm.obj /c $(ProjectDir)\FNasm.asm",输出:“$(OUTDIR)\FNasm.obj”(9) C语言中用extern "C" 声明这个函数
(10)编译链接调试