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

 

答案:把绝对地址转化为函数指针,即:((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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值