先输入tmux
Ctrl+b 松手后shift+"垂直方向创建分屏
vi minimal.S编写文件
代码如下:
#include<sys/syscall.h>
.globl _start
_start:
movq $SYS_write, %rax // write(
movq $1, %rdi // fd=1,
movq $st, %rsi // buf=st,
movq $(ed - st), %rdx // count=ed-st
syscall //
movq $SYS_exit, %rax // exit(
movq $1, %rdi // statux=1
// movq xx(%rip), %rax 相当于拥有一个指针 可以读地址的值
syscall // );
st:
.ascii "\033[01;31mHello OS World\033[0m\n"
ed:
编译文件:
gcc -c minimal.S && ld minimal.o
查看使用什么系统调用:
strace ./a.out
execve是重置状态机的第一步操作
write写操作输出Hello OS World
exit(1)返回
使用gdb调试
1.gdb a.out进入
2.starti查看第一条执行语句
3.info inferiors查看程序的进程号
401000是第一条指令_start()执行的地址空间
401000前面那些0的则是头文件库函数执行的内存地址
进程号为:1443738 每次执行都不一样
Ctrl+b松手后按向下的方向键
切换另一个窗口
使用pmap+进程号查看
下列是:pmap 1443738
找出pmap这个命令执行的所有系统调用:
strace pmap 进程号 |& vim -
在gdb里面输入
! cat /proc/1443738/maps
有每一个进程内存映射的整个地址空间的详细信息