随笔分类 -  汇编

摘要:X86-64寄存器和栈帧 概要 说到x86-64,总不免要说说AMD的牛逼,x86-64是x86系列中集大成者,继承了向后兼容的优良传统,最早由AMD公司提出,代号AMD64;正是由于能向后兼容,AMD公司打了一场漂亮翻身战。导致Intel不得不转而生产兼容AMD64的CPU。这是IT行业以弱胜强的 阅读全文
posted @ 2017-11-13 22:40 dzqabc 阅读(3602) 评论(0) 推荐(0)
摘要:在源码中,宏likely和unlikely 是这么定义的(位于include/linux/compiler.h): #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0)要理解宏likely和unlikely ,很明显必须理解__builtin_expect。__builtin_expect是GCC(version>=2.9)引进的宏,其作用就是帮助编译器判断条件跳转的预期值,避免跳转造成时间浪费。拿下面的代码来说: if (likely(acat == 1)) 阅读全文
posted @ 2013-04-09 23:17 dzqabc 阅读(694) 评论(0) 推荐(0)
摘要:注:不知道说“偷调函数”说法合不合适,在此也就这样一说了~ 主要有两点: 一、再说C++反汇编函数调用,重点是怎样通过堆栈实现由被调用函数转到调用者 二、在 1 的基础上,在WinDbg下通过修改EIP实现如下一个功能: 有两个函数foo()和hack(),在main函数中调用foo,但是在foo执行过程中,通过修改EIP来调用hack函数,最后再回到main中foo函数的下一条语句 ... 阅读全文
posted @ 2011-11-14 22:12 dzqabc 阅读(556) 评论(0) 推荐(0)
摘要:Thunk 技术的一个改进 作者:南风 下载源代码 摘要:介绍了 thunk 技术中如何避免直接写机器码。 关键字:Thunk 机器码 this指针 Thunk技术,一般认为是在程序中直接构造出可执行代码的技术(在正常情况下,这是编译器的任务)。《深度探索C++对象模型》中对这个词的来源有过考证(在中文版的162页),说thunk是knuth的倒拼字。knuth就是大名鼎鼎的计算机经典名著《Th... 阅读全文
posted @ 2011-06-29 00:37 dzqabc 阅读(511) 评论(0) 推荐(0)
摘要:inline int static_test(){ static int i =0; ...}inline 代表编译时代码拷贝,也就有多份副本了,但在VC中测试,i只有一份副本,那么编译器是如何实现的:1.代码拷贝不一定是c代码的拷贝吧,可以是编译后的汇编代码的拷贝。而函数在代码段,变量则在数据段。拷贝的只是函数部分。静态变量在函数部分保存的仅仅是该变量的地址。2.static变量不是放在栈里的,是放在静态数据区.和全局变量存放在一起.不能将它和局部变量混为一谈。 阅读全文
posted @ 2011-06-22 00:09 dzqabc 阅读(1537) 评论(0) 推荐(0)
摘要:本人上学时间做的一个计算器作业.发上来以备以后查看,写的方法有点幼稚,见笑.XIAN MACRO XIANSHI;显示大写字母 LEA BX,XIANSHI LOCAL C1,C2C1: CMP [BX],'A' JS C2 CMP [BX],'Z' JNS C2 MOV DL,[BX] MOV AH,2 INT 21H INC BX JMP C1C2: MOV DL,"!" MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H ENDMXIAN1 M 阅读全文
posted @ 2010-03-23 23:31 dzqabc 阅读(396) 评论(0) 推荐(0)