在函数前加_declspec(naked) 编译器将不会对你的函数加任何代码(不会提升堆栈等操作) 要在函数里面自己加返回的代码 ret不然就会出现堆栈不平衡的情况
#include "stdafx.h"
void_declspec(naked) test1(int a,int b)
{
_asm
{
ret //在这里要自己返回
}
}
int _tmain(_In_ int _Argc,char* _In_reads_)
{
test1(6,7);
return 0;
}
关于使用裸函数的堆栈平衡问题
#include "stdafx.h"
#include <windows.h>
HANDLE hProcess = 0;
CHAR pBuffer[20];
void _declspec(naked) ReadMemory()
{
_asm
{
push 0
push 4
push dword ptr pBuffer
push 0x41104b
push hProcess
add esp,20 //在这里一定要 提升堆栈 不然会出错
ret
}
}
int main()
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, 6256);
ReadMemory();
getchar();
return 0;
}