码迷,mamicode.com
首页 > 系统相关 > 详细

Linux汇编

时间:2021-01-15 12:10:52      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:第一条   add   指令   isa   text   调试   hat   asm   var   

源码及汇编码

func.c源码

#include <stdio.h>

int func(int a, int b)
{
        a = 100;
        b = 200;
        printf("Hello%d\n", a);
	return 0;
}

int main(int argc, char *argv[])
{
        func(1, 2);
        return 0;
}

func.sh脚本

gcc func.c -E -o func.i # 预处理,展开宏(#define),源文件及头文件
gcc func.i -S -o func.s # 编译,生成汇编代码
gcc func.s -c -o func.o # 汇编,将汇编代码翻译成机器指令
gcc func.o -o func      # 链接,将机器指令转换成二进制可执行文件

反汇编

objdump -d func

gdb

进入gdb监控模式

gdbtui func
(gdb) layout asm   # 监控汇编源码窗口
(gdb) layout split # 创建新监控窗口
(gdb) layout regs  # 监控寄存器窗口

gdb查看内存值

x/<n/f/u> <addr>

参数 说明
n 显示内容个数
f 显示格式[16,10,8,2,字符]进制[x,d,o,t,c]
u 多少个字节[1,2,4,8]作为一个值取出来[b,h,w(默认),g]
addr 直接地址0x12345678 将寄存器的内容作为地址$eax

gdb常用命令

命令 缩写 命令说明
list l 显示多行源代码
break b 设置断点
break if b if 当满足某个条件时停止
delete d 删除断点(包括watch 点),一般先使用info命令查看断点,之后使用d 断点号删除
disable 禁用断点
enable 允许断点
info i 描述程序状态,比如: i break 显示有哪些断点,info thread 哪些线程
run r 开始运行程序
display disp 跟踪查看某个变量,每次停下来都显示其值
print p 打印内部变量值
watch 监视变量值新旧的变化
step s 执行下一条语句,如果该语句为函数调用,则进入函数执行第一条语句
next n 执行下一条语句,如果该语句为函数调用,不会进入函数内部执行(即不会一步步地调试函数内部语句)
continue c 继续程序的运行,直到遇到下一个断点
finish 如果进入了某个函数,返回到调用调用它的函数,jump out
set var name = v 设置变量的值
backtrace bt 查看函数调用信息(堆栈)
start st 开始执行程序,在main函数中的第一条语句前停下
frame f 查看栈帧,比如 frame 1 查看1号栈帧
quit q 离开gdb
edit 在gdb中进行编辑
whatis 查看变量的类型
search 搜索源文件中的文本
file 装入需要调试的程序
kill k 终止正在调试的程序

寄存器说明

rip中存放的是即将执行指令的地址

常用汇编指令段

函数调用完后,栈恢复

mov    $0x0,%eax
leaveq 
retq

参考

GDB参考网站

Linux汇编

标签:第一条   add   指令   isa   text   调试   hat   asm   var   

原文地址:https://www.cnblogs.com/ctrlplayer/p/14280002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!