
汇编(asm)
文章平均质量分 73
花熊
毕业于西安交通大学
展开
-
4.__declspec(naked) 生成纯汇编使用方法
__declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码,通俗说可生成纯汇编。使用方法: #define NAKED __declspec(naked) VOID NAKED MyFunc() { __asm { ret } } 1,使用naked 关键原创 2012-08-17 09:08:20 · 3514 阅读 · 0 评论 -
9.asm-汇编mov,lea+[]寻址 小结
1.lea1.1.操作数为寄存器原创 2014-07-26 18:52:56 · 2704 阅读 · 0 评论 -
6.asm-BSF、BSR: 位扫描指令(找到最开始的1所在位置)
;BSF(Bit Scan Forward): 位扫描找1, 低 -> 高;BSR(Bit Scan Reverse): 位扫描找1, 高 -> 低 找到是 1 的位后, 把位置数给参数一并置 ZF=0找不到1时, 置 ZF=1 __asm { pushad mov ebx, 000011100b bsf eax, ebx// eax=2 bsr eax,原创 2014-01-06 10:40:26 · 5609 阅读 · 0 评论 -
5.arm-REPNZ、SCANS、CMPS(比较字符串相关,随手代码)
重复前缀指令任何一个串操作指令,都可以在前面加一个重复前缀,以实现串操作的重复执行,重复次数隐含在CX寄存器中REP ;REP前缀用在MOVS、STOS、LODS指令前,每次执行一次指令,CX减1;直到CX=0,重复执行结束REPZ ;也可以表把为REPE,用在CMPS、SCAS指令前,每执行一次串指令CX减1,并判断ZF标志是否为0原创 2013-05-13 11:07:09 · 2478 阅读 · 0 评论 -
8.asm-PEB、TEB的地址(ntdll!RtlGetCurrentPeb得到PEB)
懒得写汇编的可以用这个PPEB NTAPI RtlGetCurrentPeb();PPEB Peb=RtlGetCurrentPeb();其pu原创 2014-07-11 15:41:31 · 2415 阅读 · 0 评论 -
7.asm-shellcode流程
shellcode就是汇编的opcode,一般以子函数形式出现:取得shellcode的方便方式是:1.写一个函数如:void __stdcall code(LONG &a, LONG &b, DWORD &c, LONG &d, DWORD &e)取得它的汇编码:如: push ebp mov ebp,esp sub原创 2014-02-19 21:54:12 · 1508 阅读 · 0 评论 -
3.asm-汇编的补码和负数互换
经常用到JMP指令,如何算一个负数的补码呢,研究了下calc,直接输入负数,再转换成16进制或二进制,它们显示的就是补码了:比如:-100,转成16进制就成了9C(当然要选字节类型),那从9C再转回十进制就成了156了,那怎么么把9C转成-100呢,用负数的补码定义的逆运算吧,9C先转为二进制:10011100,再减1,为10011011,再NOT取反:1100100,再换成10进制就是1原创 2012-05-18 12:07:55 · 1564 阅读 · 0 评论 -
1.asm-80386汇编
1.leave:mov esp,ebppop ebp其实我们应该要注意到pop ebp时,esp也加了4. 2 MOVZX 指令 格式: MOVZX OPD,OPS ---- 功能: 总是高位0扩展注意点:不要再写成bTest1 byte 12hmovzx ax, word ptr bTest1 (位数相同,所以没必要扩展?)也原创 2012-04-21 20:40:45 · 1614 阅读 · 0 评论 -
2.asm-vs2008搭一个asm汇编模板
1.把lrvine文件夹放在Microsoft Visual Studio 9.0的安装目录下.我的是D:\Program Files\Microsoft Visual Studio 9.0\Irvine2.打开Microsoft Visual Studio 9.0\VC\vcprojects 目录,加入ASM Project.ico和ASM Project.vsz,使用记事本打开vc.vsd原创 2012-04-20 17:09:58 · 2555 阅读 · 2 评论 -
2.asm-asm内联汇编
PE文件与虚拟内存间的映射在调试漏洞时,可能经常需要做这样两种操作。(1)静态反汇编工具看到的PE文件中某条指令的位置是相当于磁盘文件而言的,即所谓的文件偏移,我们可能还需要知道这条指令在内存中所处的位置,即虚拟内存地址(VA)。(2)反之,在调试时看到的某条指令的地址是虚拟内存地址,我们也经常需要回到PE文件中找到这条指令对应的机器码。为此,我们需要弄清楚PE文件地址和虚拟内存地址之原创 2012-04-12 23:04:30 · 1493 阅读 · 0 评论 -
0.asm-8086汇编
1.在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的,如 mov ax, bl mov al, 100h会提示错误:Operand types out of range Value out of range 2.内存并没有分段,段的划分来自于CPU,段的起始地址必须是16的倍数.3.CS,IP指明了CP原创 2012-04-05 18:01:14 · 1125 阅读 · 0 评论 -
0.asm-call与jmp机器码取地址计算
1.CALL立即数CALL后面跟一个立即数,也就是32位偏移量时,机器码为 0XE8 后面的32位立即数是偏移量.偏移量的计算: 目标偏移地址 减 CALL 指令后的下一条指令的地址如下:804f891c e887391700 call nt!KdInitSystem (8066c2a8)804f8921 e8fc3d1700 call nt!KdpRestoreAllB原创 2012-07-26 23:12:15 · 4069 阅读 · 0 评论