zoukankan      html  css  js  c++  java
  • 跳转某指定地址、给某绝对地址赋值

    1.程序跳转至某地址执行

    (1)把那个要跳的地址转换成一个函数指针,然后调用这个函数指针。

     

    如想跳转至0x30700000地址上运行程序:

    (*(void (*)(void))(0x30700000))();
    或者
    typedef void(*)() p;  //先将p设置为返回值为void,形参为void的函数指针
    *((p)0x100000)();      //将地址0x30700000强制转换成函数指针,并在前面加上*,调用这个函数

    首先(void( * )(void) )是一个强制类型转换符,他将后面的0x30700000这个无符号整数强制转化为一个函数指针该函数指针所指向的函数入口参数为 void,返回值也是void。 如果到这步你看懂了,那么设(void (*)(void))(0x30700000)为 fp; 那么上面的表达式就可以简化为 (*fp)();   OK,这下就清楚了吧,我们将上面转化好的函数指针进行引用(也就是调用函数指针指向的函数)。


    (2)直接用goto;汇编直接用jump。

     

    2.对绝对地址0x100000赋值12

    首先需要将0x100000转化成一个指针,然后再调用它。

     

    *(unsigned int *)0x100000 = 12;
    

     

      

     

  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/simonLiang/p/6087684.html
Copyright © 2011-2022 走看看