zoukankan      html  css  js  c++  java
  • 反汇编

    ILT Incremental Link Table

    这个@ILT其实就是一个静态的表,它记录了一些函数的入口然后跳过去,每个跳转jmp占一个字节,然后就是一个四字节的内存地址,所以加起为五个字节,这样就实现了类的机制。

    660=5*132 代表是调用的是第132个函数

    这里@ILT+5就是跳转到Test函数的的jmp指令的地址,一个模块中所有的

    //函数调用都会是象这样@ILT+5*nn表示这个模块中的第n个函数,而ILT的意思

    //是Incremental Link Table,程序调用函数的时候就是通过这个表来跳转到相应函数而执

        增量链接(Incremental Linking)这个词语在使用Visual C++时经常会遇到(其实

    不只是VS系列,其它链接器也有这个特性), 就比如经常遇到的:上一个增量链接没有

    生成它, 正在执行完全链接.  但是它是什么意思呢? 很多人只是经常看到, 但是不

    明白这是什么. 首先说明一下, 这个特性是链接器为了<提高链接速度>而增加的功

    能. 说是这样, 可能不理解, 下面就说说其原理:

     

        有一个源代码文件, 你写了许多许多行, 你正在调试它, 你突然发现某个地方

    有一个小BUG, 你打算改正, 好了, 错误改正了, 但是链接器该采用何种方式链接新代码?

     

        其一: 可以把obj删除, 然后重新生成.

        其二: 为每个函数预留一部分空间, 编译链接时, 只是修改你修改过的函数

    对应的代码, 其它二进制代码保持不变.

     

        可能你已经明白了, 为目标(函数)代码"预留一部分空间", 这就是"增量"的含

    义. 当代码修改后, 只需要修改这一部分的目标代码即可快速完成编译与链接!

    这就为调试代码时快速修改编译提高了速度! 这也是为什么调试器

    支持 "Edit and Continue" 特性!

     

        这不浪费程序空间么? 你可能会想, 不过确实如此. 正因为如此, Debug版本的

    目标文件会远远大于Release版本的目标文件(不单因为此). 在Release编译时, 是

    不能启用增量链接模式的!

     

    相信世界是平的
    谨记四个字“修身养性”
    大江东去浪淘尽英雄,再牛B的人物最后也是一掊土
    向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
    相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
    我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



    支持大额赞助:
  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/sky-view/p/3329264.html
Copyright © 2011-2022 走看看