#bash
gcc -fno-stack-protector -z execstack -o level1 level1.c
这个命令编译程序。-fno-stack-protector和-z execstack这两个参数会分别关掉DEP和Stack Protector。同时我们在shell中执行:
#!bash
sudo -s
echo 0 > /proc/sys/kernel/randomize_va_space
exit
这几个指令。执行完后我们就关掉整个linux系统的ASLR保护。
disas main,显示main函数对应的汇编代码
(5)b设置断点 b means break
格式:b *内存地址
delete:删除所有断点
delete num:删除编号为num的断点
info break:列出所有断点
(6)ni 单步步过,相当于debug命令中的p
(7)si 单步步入,相当于debug命令中的t
(8)finish 执行到返回
(9)display 显示某寄存器的值
格式:display /x $寄存器名字。例如:display /x $eax
(10)x查看内存单元
格式:x /nfu 内存地址 x means examine
说明:
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a按十六进制格式显示变量。
i 指令地址格式。
c 按字符格式显示变量。
s 按字符串格式显示变量。
f 按浮点数格式显示变量。
u表示一个地址单元的长度,其中:
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节。
更改内存的值:
set $rsp=0x00000000
set *0x00000329332d="/bin/sh"
(11)p查看变量值
格式: p 变量名
(12)查看寄存器的值
info register
如果要查看变量的地址,用p &变量名
aaaaaaaaaaaaaaaaaaaabbbbbb
查看当前程序栈的内容: x/10x $sp–>打印stack的前10个元素
查看当前程序栈的信息: info frame----list general info about the frame
查看当前程序栈的参数: info args—lists arguments to the function
查看当前程序栈的局部变量: info locals—list variables stored in the frame
查看当前寄存器的值:info registers(不包括浮点寄存器) info all-registers(包括浮点寄存器)
查看当前栈帧中的异常处理器:info catch(exception handlers)
info share 这个地址不是偏移
info proc mapping 这个里面模块第一个开始位置即是偏移
查找可执行程序依赖库位置
ldd /bin/ls
查找库导出函数
objdump -tT xxx.so
839



被折叠的 条评论
为什么被折叠?



