主要参考:
- https://blog.csdn.net/wangyi_lin/article/details/6921110
- https://github.com/Wangzhike/HIT-Linux-0.11/blob/master/2-syscall/2-syscall.md
这个实验我真的是做不下去了,对于我来说,真的是很难,汇编啥的只有一点点了解,基本就是mov命令cs ip等一些简单的东西。只能多看几遍了,第一遍看真的是啥也不懂。
下面先记录记录一下我在做实验3的时候遇到的一些不明白的地方,做一下汇总记录。
intel汇编 和 AT&T汇编 的区别
参考:https://blog.csdn.net/kennyrose/article/details/7575952
对于 __ asm __ volatile 函数讲解
在实验手册中首先介绍了close系统调用,但是对于下面的代码不是很明白:
1 | int close(int fd) |
讲解:这是gcc内嵌汇编。
第一个冒号后表示汇编代码输出结果
第二个冒号后表示在这段汇编执行前输入
a 表示eax
b 表示ebx
0 表示这段代码列出的第一个寄存器即eax
这段代码的意思是把NR_close装入eax 把fd装入ebx 调用int指令陷入内核,内核返回后将eax的内容作为结果输出到res中。
另外,下面博客介绍了GCC内嵌汇编的使用:插入C语言的一个汇编语言代码片段可以分成4部分,以“:”号加以分隔,其一般形式为:\指令部:输出部:输入部:损坏部** https://blog.csdn.net/robbie1314/article/details/6329329
对include/unistd.h中添加的\NR__XXX的解释
“\NR__”是在Linux的源码中为每个系统调用加上的前缀。这里其实是Linux自己命名习惯,无关紧要,但是当时看着很不理解。
关于sys.h 中 sys_call_table的介绍:
https://www.cnblogs.com/alantu2018/p/8991310.html