09 2021 档案
摘要:用vc6调试代码的时候看到反汇编代码里面有 call @ILT+35这种,查了一下ILT叫increament linking Table ,叫增量同步表。 它ILT涉及到的一种技术叫增量同步。 有这样一种应用场景,如果你有多个cpp文件,你只修改了其中一个cpp文件中的某个函数的一个小部分,那是不
阅读全文
摘要:1.c++程序编译过程。包括两个阶段,compiler和linker。第一个阶段compiler是把c++文件编译成obj文件。第二个阶段是linker把多个obj文件和lib文件生成可执行文件。明白这个过程,对调试程序很有帮助,能够帮你确认问题发生在哪个阶段。比如提示syntax error,那就
阅读全文
摘要:刚在52破解看了一篇花指令的文章,感觉挺好的。 第一种花指令是jmp+垃圾数据 比如 jmp label //这里存放垃圾指令或数据 label: //正常指令 push ebp mov ebp,esp 第二种是假分支跳转 xor eax, eax; test eax, eax; jnz LABEL
阅读全文
摘要:遇到不懂的指令,不用到网上查,自己用OD测试一下就知道了。 neg a neg指令执行的操作是把a的每个二进制位取反之后再加1。效果就是数学上的求相反数,比如neg 3的结果就是-3,neg -3的结果就是3. neg 0的结果就是0 经过测试发现,neg a 不管a是正数还是负数,都会置CF为1这
阅读全文
摘要:sete指令通常和算数指令或者逻辑运算指令一起出现。 CMP eax,5 sete cl 首先顾名思义一下,sete的意思就是set equal 就是相等的时候设置,设置谁,设置cl,用谁设置cl的值,用ZF标志位的值。 所以sete指令的意思就是根据ZF标志位的值设置一个变量的值是1和0 上面代码
阅读全文
摘要:如果一个数是0,那么这个数和它本身与之后的结果还是它本身,运算结果是0,那么就会置ZF为1。 如果一个数是正数,那么这个数和它本身与之后的结果还是它本身。不会置ZF和SF为1 如果一个数是负数,那么这个数和它本身与之后的结果还是它本身,会置SF为1. 所以通过标志位就能区分开一个数是大于0等于0还是
阅读全文