GNU/Linux Tips

来自Jack's Lab
2013年8月16日 (五) 19:06Comcat (讨论 | 贡献)的版本

跳转到: 导航, 搜索

1 Mounting partition from VDI image

$ od -j344 -N4 -td4 /work/FreeDos.vdi | awk 'NR==1{print $2;}'
8192

$ sudo losetup -f --show -o 8192 /work/FreeDos.vdi
/dev/loop0

$ sudo fdisk  -lu /dev/loop0

Disk /dev/loop0: 113 MB, 113246208 bytes
16 heads, 63 sectors/track, 219 cylinders, total 221184 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *          63     1023119      511528+   6  FAT16

$ sudo mount -o loop,offset=$((512*63)) /dev/loop0 /mnt

$ ls /mnt/
AUTOEXEC.BAT  BOOTSECT.BIN  COMMAND.COM  FDCONFIG.SYS  FDOS  KERNEL.SYS


$ sudo umount /mnt
$ sudo losetup -d /dev/loop0

$ VBoxManage clonehd /work/FreeDos.vdi /work/freedos.vdi --format VDI --variant Fixe



2 GDB Tips

1. 查看寄存器

(gdb) i r
(gdb) i r a                     # 查看所有寄存器(包括浮点、多媒体)
(gdb) i r esp
(gdb) i r pc


2. 查看内存

(gdb) x /wx 0x80040000    # 以16进制显示指定地址处的数据
(gdb) x /8x $esp
(gdb) x /16x $esp+12
(gdb) x /16s 0x86468700   # 以字符串形式显示指定地址处的数据
(gdb) x /24i 0x8048a51      # 以指令形式显示指定地址处的数据(24条)


3. 修改寄存器的值

(gdb) set $v0 = 0x004000000
(gdb) set $epc = 0xbfc00000


4. 修改内存的值

(gdb) set {unsigned int}0x8048a51=0x0
(gdb) set *(unsigned int*)0x8048a54=0x55aa55aa


5. 内存搜索

Usage: find <start> <end> <count> <value>

(gdb) define find                            
set $ptr = $arg0
set $cnt = 0
while ( ($ptr<=$arg1) && ($cnt<$arg2) )
    if ( *(unsigned int *)$ptr == $arg3 )
        x /wx $ptr
        set $cnt = $cnt + 1
    end
    set $ptr = $ptr + 4
end
end


6. 断点、监测点

(gdb) b *0x80400000
(gdb) watch *(unsigned int *)0xbffff400==0x90909090



3 Strace Tips

1. strace 是一个诊断调试工具,其借助内核 ptrace 机制,跟踪目标进程所执行的系统调用和收到的信号。

2. 常用选项

-o filename: 将输出信息写到文件filename中,默出输出到标准错误(stderr)
-c: 统计输出,包括每个系统调用的执行时间、被调用次数等
-tt: 每行前加上相对时间戳
-e trace=open,close: 只跟踪open, close
-e trace=file: 只跟踪以文件名为参数的的调用,等价于 -e trace=open,stat,chmod,unlink...
-e trace=process: 进程管理相关
-e trace=network: 网络相关
-e trace=ipc: 进程间通信相关
-e trace=signal: 信号相关
-e verbose=close,open: vebose模式输出(结构体成员都输出)
-e abbrev=open: 默认情况下所有调用的显示都是abbreviate,只要给这个选项,就只有open为abbrev
-e raw=open: open 调用以16进制形式输出参数
-e read=3,5: 显示文件描述符3、5的读取数据
-e write=3,5
-p pid: 绑定到pid对应的正在运行的进程。此参数常用来调试后台进程
-f: 除了跟踪当前进程外,还跟踪其子进程
-ff: 当跟踪多个进程且输出到文件时,使用该选项则将各个进程的跟踪信息写入各个filename.pid中











个人工具
名字空间

变换
操作
导航
工具箱