一、如何实现对绝对地址赋值?
int *ptr;
ptr = (int *)0x67a9;//指针变量初始化,给指针变量赋予一个地址
*ptr = 55; //通过*ptr来改变prt所指向地址的变量的值
解析:实现对指定的绝对地址进行赋值,利用指针,将绝对地址赋给指针变量,通过指针*ptr来修改ptr里面的地址所对应的变量 的值。
关于(int*)强制转换,需要根据指针变量的基类型,即所指向的变量的数据类型来决定。
char *ptr;
ptr = (char *)0x67a9;//指针变量初始化,给指针变量赋予一个地址
*ptr = 'a'; //通过*ptr来改变prt所指向地址的变量的值
二、如何实现从指定的绝对地址开始执行程序
如何让程序跳转到0x100000处执行
((void(*)(void))0x100000)();
解析:void(*)(void)是一个函数指针,是一个指向无返回值,参数为空的函数指针;
void(*) (void))0x100000是强制转换,将0x100000强制转换为函数指针,即函数指针的地址为0x100000,对函数 指针初始化了,((void(*)(void))0x100000)();即为一个地址为0X100000,无返回值,参数为空的函数。
正如:f(); f为一个地址,即一个指针变量,是指向某一个函数类型的指针
void (*)(void) f;
f=(void(*)(void))0x100000;
f();