汇编基础-CTF

1、AT&T风格和Intel风格对比

AT&T风格和Intel风格对比

AT&T语法风格(linux) Intel语法风格 寄存器前加%符号 寄存器前无符号表示 立即数前加$符号 立即数前无符号表示 16进制数使用0x前缀 16进制数使用h后缀 源操作数在前,目标操作数在后 目标操作数在前,源操作数在后 间接寻址使用()表示 间接寻址使用[]表示 操作位数为指令+1、w、b(如0x11) 操作位数为指令+dword ptr等(如 QWORD PTR[RAX]) 间接寻址格式%sreg:disp(%base,index,scale) 间接寻址格式:sreg:[basereg+index*scale+disp]
不同位数处理器的通用寄存器名称
操作数可用寄存器名称
8位AL、BL、CL 、DL、 DIL 、SIL、 BPL、 SPL 、R8L 、R9L 、R10L、 R11L、 R12L、 R13L 、R14L 、R15L
16位AX、 BX 、CX 、DX 、DI、 SI、 BP、 SP、 R8W 、R9W、 R10W、 R11W、 R12W 、R13W 、R14W 、R15W
32位EAX 、EBX 、ECX、 EDX 、EDI 、ESI 、EBP 、ESP、 R8D、 R9D、 R10D 、R11D、 R12D 、R13D、 R14D 、R15D
64位RAX 、RBX、 RCX 、RDX 、RDI 、RSI 、RBP、 RSP 、R8、 R9、 R10 、R11 、R12 、R13 、R14 、R15

“ABCDEFGH"在gdb中显示:

gef > x/s 0x4005d4

0x4005d4:"ABCDEF"

gef > x/gx 0x4005d4

0x4005d4:0x48447464544434241

gef > x/8x: 0x4005d4

0x4005d4: 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48

数据传送与访问

MOV EAX,0        ;EAX=00000000h

MOV AL ,78        ;EAX=00000078h

MOV AX,1234h   ;EAX=00001234h

MOV EAX,12345678h; EAX=12345678h 

XCHG交换两个操作数的值

x86偏移量,如下数组

.data

        testArray BYTE 99h,98h,97h,96h

.code

        MOV a1, testArray            ;a1=99h

        MOV b1, [testArray+1]      ;b1=98h

        MOV c1,[testArray+2]       ;c1=97h

有些编译器未实现数组边界检查,需要合适的偏移量

 .data 

        testArrayW WORD 100h,200h,300h

        testArrayD DWORD 10000h,20000h,30000h

.code

        MOV AX,testArrayW                ;AX=100h

        MOV BX,[testArrayW+2]          ;BX=200h

        MOV ECX,testArrayD              ;ECX=10000h

        MOV EDX,[testArrayD+4]        ;EDX=20000h 

算术运算与逻辑运算(通常机器底层都是以补码形式操作的)

操作数加1和操作数减1

.data

        testWord WORD 1000h

.code

        INC EAX

        DEC testWord

 加法操作

.data

        testData DWORD 10000h

        testData2 DWORD 20000h

.code

        MOV EAX,testData        ;EAX=10000h

        ADD EAX,testData2       ;EAX=30000h

减法操作

 

.data

        testData DWORD 20000h

        testData2 DWORD 10000h

.code

        MOV EAX,testData        ;EAX=20000h

        SUB EAX,testData2       ;EAX=10000h

NEG指令是把操作数转换为二进制补码,并将操作数的符号位取反

跳转指令与循环指令 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值