mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-12-24 19:21:15 +07:00
update gdb
This commit is contained in:
parent
d9197c814a
commit
063b771759
@ -57,6 +57,14 @@ $gcc -c hello.c -o hello.o
|
||||
#### 链接
|
||||
目标文件需要链接一大堆文件才能得到最终的可执行文件。链接过程主要包括地址和空间分配(Address and Storage Allocation)、符号决议(Symbol Resolution)和重定向(Relocation)等。
|
||||
|
||||
#### gcc 技巧
|
||||
通常在编译后只会生成一个可执行文件,而中间过程生成的 `.i`、`.s`、`.o` 文件都不会被保存。我们可以使用参数 `-save-temps` 永久保存这些临时的中间文件。
|
||||
```text
|
||||
$ gcc -save-temps hello.c
|
||||
$ ls
|
||||
a.out hello.c hello.i hello.o hello.s
|
||||
```
|
||||
|
||||
|
||||
## C 语言标准库
|
||||
C 运行库(CRT)是一套庞大的代码库,以支撑程序能够正常地运行。其中 C 语言标准库占据了最主要地位。
|
||||
|
@ -91,48 +91,110 @@ long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
|
||||
设置临时断点。参数形式同 `break` 一样。当第一次命中时被删除。
|
||||
|
||||
#### watch
|
||||
为表达式设置观察点。每当一个表达式的值改变时,观察点就会停止执行您的程序。
|
||||
- `watch [-l|-location] <expr>` 如果给出了 `-l` 或者 `-location`,则它会对 `expr` 求值并观察它所指向的内存。
|
||||
|
||||
#### step -- s
|
||||
单步执行程序,直到到达不同的源码行。
|
||||
- `step [N]` 参数 `N` 表示执行 N 次(或由于另一个原因直到程序停止)。
|
||||
|
||||
#### reverse-step
|
||||
反向步进程序,直到到达另一个源码行的开头。
|
||||
- `reverse-step [N]` 参数 `N` 表示执行 N 次(或由于另一个原因直到程序停止)。
|
||||
|
||||
#### next -- n
|
||||
单步执行程序,执行完子程序调用。
|
||||
- `next [N]`
|
||||
|
||||
与 `step` 不同,如果当前的源代码行调用子程序,则此命令不会进入子程序,而是继续执行,将其视为单个源代码行。
|
||||
|
||||
#### reverse-next
|
||||
反向步进程序,执行完子程序调用。
|
||||
- `reverse-next [N]`
|
||||
|
||||
如果要执行的源代码行调用子程序,则此命令不会进入子程序,调用被视为一个指令。
|
||||
|
||||
#### return
|
||||
您可以使用 `return` 命令取消函数调用的执行。如果你给出一个表达式参数,它的值被用作函数的返回值。
|
||||
- `return <expression>` 将 `expression` 的值作为函数的返回值并使函数直接返回。
|
||||
|
||||
#### finish -- fin
|
||||
执行直到选定的栈帧返回。
|
||||
- `finish`
|
||||
|
||||
#### until -- u
|
||||
执行程序直到大于当前栈帧或当前栈帧中的指定位置(与 `break` 命令相同的参数)的源码行。此命令常用于通过一个循环,以避免单步执行。
|
||||
- `until <location>` 继续运行程序,直到达到指定的位置,或者当前栈帧返回。
|
||||
|
||||
#### continue -- c
|
||||
在信号或断点之后,继续运行被调试的程序。
|
||||
- `continue [N]`
|
||||
|
||||
如果从断点开始,可以使用数字 `N` 作为参数,这意味着将该断点的忽略计数设置为 `N - 1`(以便断点在第 N 次到达之前不会中断)。
|
||||
|
||||
#### print -- p
|
||||
求表达式 expr 的值并打印。可访问的变量是所选栈帧的词法环境,以及范围为全局或整个文件的所有变量。
|
||||
- `print [expr]`
|
||||
- `print /f [expr]` 通过指定 `/f` 来选择不同的打印格式,其中 `f` 是一个指定格式的字母
|
||||
|
||||
#### x
|
||||
检查内存。
|
||||
- `x/nfu <addr>`
|
||||
- `x <addr>`
|
||||
|
||||
`n`, `f`, 和 `u` 都是可选参数,用于指定要显示的内存以及如何格式化。
|
||||
`addr` 是要开始显示内存的地址的表达式。
|
||||
`n` 重复次数(默认值是 1),指定要显示多少个单位(由 `u` 指定)的内存值。
|
||||
`f` 显示格式(初始默认值是 `x`),显示格式是 `print('x','d','u','o','t','a','c','f','s')` 使用的格式之一,再加 `i`(机器指令)。
|
||||
`u` 单位大小,`b` 表示单字节,`h` 表示双字节,`w` 表示四字节,`g` 表示八字节。
|
||||
|
||||
#### display
|
||||
每次程序停止时打印表达式 expr 的值。
|
||||
- `display <expr>`
|
||||
- `display/fmt <expr>`
|
||||
- `display/fmt <addr>`
|
||||
|
||||
`fmt` 用于指定显示格式。对于格式 `i` 或 `s`,或者包括单位大小或单位数量,将表达式 `addr` 添加为每次程序停止时要检查的内存地址。
|
||||
|
||||
#### info display
|
||||
|
||||
#### disable display
|
||||
|
||||
#### enable display
|
||||
打印自动显示的表达式列表,每个表达式都带有项目编号,但不显示其值。
|
||||
|
||||
#### undisplay
|
||||
取消某些表达式在程序停止时自动显示。参数是表达式的编号(使用 `info display` 查询编号)。不带参数表示取消所有自动显示表达式。
|
||||
|
||||
#### disable display
|
||||
禁用某些表达式在程序停止时自动显示。禁用的显示项目被再次启用。参数是表达式的编号(使用 `info display` 查询编号)。不带参数表示禁用所有自动显示表达式。
|
||||
|
||||
#### enable display
|
||||
启用某些表达式在程序停止时自动显示。参数是重新显示的表达式的编号(使用 `info display` 查询编号)。不带参数表示启用所有自动显示表达式。
|
||||
|
||||
#### help -- h
|
||||
打印命令列表。
|
||||
- `help <class>` 您可以获取该类中各个命令的列表。
|
||||
- `help <command>` 显示如何使用该命令的简述。
|
||||
|
||||
#### attach
|
||||
挂接到 GDB 之外的进程或文件。将进程 ID 或设备文件作为参数。
|
||||
- `attach <process-id>`
|
||||
|
||||
#### run -- r
|
||||
启动被调试的程序。可以直接指定参数,也可以用 `set args` 设置(启动所需的)参数。还允许使用 `>`, `<`, 或 `>>` 进行输入和输出重定向。
|
||||
|
||||
#### backtrace -- bt
|
||||
打印整个栈的回溯。
|
||||
|
||||
- `bt` 打印整个栈的回溯,每个栈帧一行。
|
||||
- `bt n` 类似于上,但只打印最内层的 n 个栈帧。
|
||||
- `bt -n` 类似于上,但只打印最外层的 n 个栈帧。
|
||||
- `bt full n` 类似于 `bt n`,还打印局部变量的值。
|
||||
|
||||
> 注意:使用 gdb 调试时,会自动关闭 ASLR,所以可能每次看到的栈地址都不变。
|
||||
|
||||
#### ptype
|
||||
打印类型 TYPE 的定义。
|
||||
- `ptype[/FLAGS] TYPE-NAME | EXPRESSION`
|
||||
|
||||
注意:使用 gdb 调试时,会自动关闭 ASLR,所以可能每次看到的栈地址都不变。
|
||||
参数可以是由 `typedef` 定义的类型名, 或者 `struct STRUCT-TAG` 或者 `class CLASS-NAME` 或者 `union UNION-TAG` 或者 `enum ENUM-TAG`。
|
||||
|
||||
|
||||
## gdb-peda
|
||||
|
Loading…
Reference in New Issue
Block a user