您的位置:首页 > 编程语言 > C语言/C++

用c语言跳转到绝对地址0x10000执行

2011-10-21 12:29 288 查看
答案:把绝对地址转化为函数指针,即:((void*)(void)0x10000)();

不用函数指针你怎么来保存函数的入口地址——函数名代表了函数的入口地址,这是因为C语言中没有函数对象,所以要用函数指针来保存函数的入口地址,在c++中引入了函数对象——stl,他是算法具有了通用性


有很多方法可以实现
比如:
1.把那个要跳的地址转换成一个函数指针,然后调用这个函数指针.
2.直接用goto

不过在C嵌入汇编更容易实现,下面帮你实现上面那2个方法.

#include <stdio.h>

void Print()
{
printf("HelloWorld!\n");
}

int main()
{
_asm
{
lea eax, Print
call eax
}
printf("Main\n");
return 0;
}

////////////////////////////////////////////////////////////////

#include <stdio.h>

void Print()
{
printf("HelloWorld!\n");
}

int main()
{
_asm
{
lea eax, RetAddr
push eax
jmp Print
RetAddr://call执行完之后返回到这里
}
printf("Main\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: