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

来源:互联网 发布:js模块化用什么 编辑:程序博客网 时间:2024/04/28 16:41

 

答案:把绝对地址转化为函数指针,即:((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 PrintRetAddr://call执行完之后返回到这里 } printf("Main\n"); return 0;}
原创粉丝点击