【摘要】 跳转某个地址执行
最近看指针,发现有个奇淫方法,直接跳转执行某个地址执行程序。
例如:要跳转0x1000地址执行代码,代码是 ((void)(*)(void))0x1000)()
注意:以下测试方法在esp32单片机上执行,在linux上,由于每个应用都是虚拟内存,所以无法通过地址跳转执行某段程序。
为什么会这样子可以直接跳转到某个地址执行程序呢?首先先看一个demo…
跳转某个地址执行
最近看指针,发现有个奇淫方法,直接跳转执行某个地址执行程序。
例如:要跳转0x1000地址执行代码,代码是((void)(*)(void))0x1000)()
注意:以下测试方法在esp32单片机上执行,在linux上,由于每个应用都是虚拟内存,所以无法通过地址跳转执行某段程序。
为什么会这样子可以直接跳转到某个地址执行程序呢?首先先看一个demo。
void print(void){
printf("this is a test\r\n");
}
void app_main(void)
{
printf("Hello world!\n");
/* Print chip information */
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");
void (*function_p)(void);
function_p=print;
printf("The address of function = %d !\n", (int )function_p);
vTaskDelay(100);
printf("here\r\n");
((void (*)(void))1074602104)();
(*function_p)();
// printf("print=%p\r\n",function_p);
}
© 版权声明文章版权归作者所有,未经允许请勿转载。THE END
喜欢就支持一下吧
相关推荐