• 反汇编


    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的人物最后也是一掊土
    向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
    相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
    我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



    支持大额赞助:
  • 相关阅读:
    [Practical Git] Clean up commits with git rebase
    [Practical Git] Show who changed a line last with git blame
    [Practical Git] Compare file changes with git diff
    [Practical Git] Filter commit history with git log arguments
    [Practical Git] Format commit history with git log arguments
    [Practical Git] Navigate git command pager output with Unix less commands
    [Practical Git] Switching between current branch and last checkout branch
    [ES6] ES6 Parameter Object Destructuring with Required Values
    [React] Higher Order Components (replaces Mixins)
    HDU 1242 Rescue (BFS(广度优先搜索))
  • 原文地址:https://www.cnblogs.com/sky-view/p/3329264.html
Copyright © 2020-2023  润新知