目录
反编译后得到的汇编程序是可以被C/C++这样的高级语言调用的,本文演示一下C++调用反编译后的汇编程序。
1.反编译后的汇编程序
如下汇编程序是逆向一个将字符串转为大写的程序得到的。
second.asm
.486
;函数的调用方式为C中的调用方式, 对调用约定的
;判断非常重要, 这会直接影响程序的运行结果, 以及栈的平衡
.model flat, c
option casemap: none
.code;代码段定义
ToUpper proc arg_0:DWORD ;函数入口
push esi
mov esi, arg_0;语法修正
push edi
mov edi, esi
or ecx, 0FFFFFFFFh
xor eax, eax
repne scasb
not ecx
dec ecx
xor edx, edx
test ecx, ecx
jle short loc_40102D
loc_401018:;地址标号
mov al, [edx+esi]
cmp al, 61h
jl short loc_401028
cmp al, 7Ah
jg short loc_401028
sub al, 20h
mov[edx+esi], al
loc_401028:;地址标号
inc edx
cmp edx, ecx
jl short loc_401018
loc_40102D:;地址标号
pop edi
pop esi
ret
ToUpper endp
end
2. 汇编程序汇编成PE格式的目标文件
3.创建项目调用汇编后的obj文件
useAsm.cpp
#include <iostream>
extern "C" void ToUpper(char* );
int main()
{
char tmpBuf[256] = "Hello World !";
std::cout << "before:: " << tmpBuf << std::endl;
ToUpper(tmpBuf);
std::cout << "after:: " << tmpBuf << std::endl;
return 0;
}