进程的地址空间

先输入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

有每一个进程内存映射的整个地址空间的详细信息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值