通过编译(变量用常量代替):
_asm{
push 6 //变量a
push 0 //变量b
push 6 //变量c
mov ecx,0x6d3610
call ecx
add esp,0xc
}
现在要改为变量 求解
以下为什么不行?
int aInt=6;
int* aPoint=&aInt;
_asm{
mov eax,aPoint
push eax //变量a
push 0 //变量b
push 6 //变量c
mov ecx,0x6d3610
call ecx
add esp,0xc
}
_asm{
push 6 //变量a
push 0 //变量b
push 6 //变量c
mov ecx,0x6d3610
call ecx
add esp,0xc
}
现在要改为变量 求解
以下为什么不行?
int aInt=6;
int* aPoint=&aInt;
_asm{
mov eax,aPoint
push eax //变量a
push 0 //变量b
push 6 //变量c
mov ecx,0x6d3610
call ecx
add esp,0xc
}
int a=6;
_asm{
...
mov eax,a
push eax //变量a
...
}
int add(int a,int b,int c)
{
_asm
{
pushad //压栈
mov eax,p //指针p的值,也就是aa的地址
mov edx,dword ptr[eax] //取p指向的地址的DWORD值,也就是aa的值
mov eax, dword ptr[ebp+8] //参数1
mov ecx, dword ptr[ebp+0xC] //参数2
mov edx, dword ptr[ebp+0x10] //参数3
push eax
push edx
push ....
call xxx
.......
popad 出栈 }
}
//这些都是堆栈上的变量,要通过ESP 的地址才能访问 楼主可以把变量弄成全局的 或者静态的。
//int* aPoint=&aInt;
static int aInt=6;
static int* aPoint=&aInt;
_asm{
mov eax,aPoint
push eax //变量a
push 0 //变量b
push 6 //变量c
mov ecx,0x6d3610
call ecx
add esp,0xc