一道汇编语言与c语言匹配的死怼题

本文通过一道汇编语言与C语言的匹配题,介绍了AT&T汇编语法,包括寄存器引用、操作数排列、立即数、符号常数引用和操作数长度等,并解析了SAR、IDIV指令。通过分析C代码的逻辑,匹配相应的汇编代码,最终得出解题思路。
摘要由CSDN通过智能技术生成

题目地址http://ctf5.shiyanbar.com/reverse/cfg-to-c/index.html

这里用的都是AT&T语法

1.引用寄存器要在寄存器号前加百分号%,如“movl %eax, %ebx”。

2.操作数排列是从源(左)到目的(右),如“movl %eax(源), %ebx(目的)”

3.使用立即数,要在数前面加符号$, 如“movl $0x04, %ebx”

或者:

para = 0x04

movl $para, %ebx

指令执行的结果是将立即数04h装入寄存器ebx。

4.符号常数直接引用 如

value: .long 0x12a3f2de

movl value , %ebx

指令执行的结果是将常数0x12a3f2de装入寄存器ebx。

引用符号地址在符号前加符号$, 如“movl $value, % ebx”则是将符号value的地址装入寄存器ebx。

5. 操作数的长度

操作数的长度用加在指令后的符号表示b(byte, 8-bit), w(word, 16-bits), l(long, 32-bits),如“movb %al, %bl”,“movw %ax, %bx”,“movl %eax, %ebx ”。

如果没有指定操作数长度的话,编译器将按照目标操作数的长度来设置。比如指令“mov %ax, %bx”,由于目标操作数bx的长度为word,那么编译器将把此指令等同于“movw %ax, %bx”。

死磕的一道题 毕竟汇编代码太难懂了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值