汇编呼叫函数的调用方法
来源:互联网 发布:哪家证券公司炒股软件 编辑:程序博客网 时间:2024/05/16 08:00
用汇编呼叫函数的样例,大家要注意的是呼叫后恢复堆栈(esp栈顶指针的值)现场的方法,没有恢复,或者恢复不正确,会有大大的error报出来!
//呼叫无参数的函数
DWORD dwRet;
void CallFunc0(LPVOID lpFunc){
__asm
{
call DWORD Ptr[lpFunc]
mov dwRet ,eax
//cmp ax ,1//[esp+4]
//call DWORD Ptr[lpFunc]
}
}
//呼叫一个参数的函数
void CallFunc1(LPVOID lpFunc,DWORD param1)
{
__asm
{
push param1
call DWORD Ptr[lpFunc]
add esp ,4 //恢复栈指针
mov dwRet ,eax
}
}
//呼叫2个参数的函数
{
__asm
{
push param1
push param2
call DWORD Ptr[lpFunc]
add esp ,8 //恢复栈指针
mov dwRet ,eax
}
}
//呼叫3个参数的函数
void CallFunc3(LPVOID lpFunc,DWORD param1,DWORD param2 ,DWORD param3)
{
__asm
{
push ax
call DWORD Ptr[lpFunc]
cmp ax ,[esp-4]
call DWORD Ptr[lpFunc]
mov dwRet ,eax
}
}
void func0()
{
::MessageBox(0,0,0,0);
}
void func1(LPCTSTR lpStr)
{
::MessageBox(0,lpStr,0,0);
}
void func2(LPCTSTR lpStr ,LPCTSTR lpStr2)
{
::MessageBox(0,lpStr,lpStr2,0);
}
//这里启动调用
{
// TODO: Add your control notification handler code here
dwRet = 0;
CallFunc0(func0);
LPCTSTR lp1 = _T("Call func1 called!~");
CallFunc1(func1,(DWORD)lp1);
LPCTSTR lp2 = _T("Call func2 called!~");
CallFunc2(func2,(DWORD)lp1,(DWORD)lp2);
}
- 汇编呼叫函数的调用方法
- 汇编函数的调用
- 编写c51程序调用汇编函数的一种方法
- Linux下NASM汇编函数和C语言函数相互调用的方法
- 函数调用的汇编实现浅析
- VC 函数调用的 汇编代码 浅析
- C++虚函数调用的汇编过程
- 分析函数调用的汇编指令
- INTEL汇编的函数调用过程
- INTEL汇编的函数调用过程
- C于汇编函数的相互调用
- C语言函数调用的汇编实现
- 调用游戏dll里面的汇编函数
- 函数调用堆栈的汇编解析
- C++中调用汇编的方法
- C调用汇编函数
- 函数调用反汇编
- 虚函数调用汇编
- 用例子说明MVC 设计模式(以Objective-C 实现)
- Interface Builder 窗口操作
- 转换xml
- Cocoa数据类型
- 使用ifstream和getline读取文件内容
- 汇编呼叫函数的调用方法
- Cocoa中的Text
- Cocoa画图
- Cocoa文件管理
- iphone编程 EXE_BAD异常
- 经常用到的Eclipse快捷键
- min3d 引擎学习笔记之一
- GOT(全局偏移表)和PLT(过程链接表)
- [转]创新工厂的面试题