bochs调试指令

    xiaoxiao2021-03-25  70

    转自:http://blog.csdn.net/lp19911126/article/details/54136421

    linux上编译src需要在编译时设置编译选项:

     ./configure --prefix=/opt/bochs/debug --enable-plugins --enable-debugger --enable-        disasm         注释:               * --prefix=/opt/bochs/debug 软件将被安装到哪个目录下               * --enable-plugins 是必须要的               * --enable-debugger 是打开bochs的自带调试器               * --enbale-disasm 允许反汇编 另外linux上支持bochs内联使用gdb的调试器,具体编译方法还没用尝试过,待更新。。。 再来些bochsdbg的调试指令吧,网上搜的有些指令因为版本问题并不能使用(我用的是2.4.6): b addr 在物理地址处设置断点 addr为物理内存地址,不加段基址 lb 在线性地址处设置断点  addr为线性物理地址,不加基址 vb 在虚拟地址上设置断点 addr为段基址:偏移地址, cs段 c 继续执行知道遇到断点 n 单步执行 跳过子程序和int中断程序 s 单步执行 s num ( s指令后加一数字) 执行n步 dump_cpu 查看寄存器信息  (实测下来这个指令好像不好使。。。)   x /nuf addr 显示指定内存地址的数据,addr可以是线性的内存地址,也可以是虚址 格式是基址:偏移或者基址寄存器:偏移 n 显示的数据长度 u 数据单元大小 b,h,w,g分别对应1,2,4,8字节 f 数据显示格式 x,d,u,o,t,c分别对应十六进制、十进制、无符号十进制、八进制、二进制、字符串 u [/count] start end 反汇编一段线性内存(作用与上面的一样) (count 参数指明要反汇编的指令条数 ,例子:u /5 --反汇编从当前地址开始的5条指令)   info指令组 info b 展示当前的断点状态信息 info dirty 展示自从上次显示以来物理内存中的脏页(被写的页) info program 展示程序的执行状态  (无法使用!) info r|reg|rigisters 展示寄存器内容 info cpu 展示CPU寄存器内容 info fpu 展示FPU寄存器的状态 info idt 展示中断描述表 info ivt 展示中断向量表(保护模式下无效) info gdt 展示全局描述表 info tss 展示当前的任务状态段 info cr 展示CR0-CR4寄存器状态 (无法使用) info flags 展示标志寄存器   (无法使用)   寄存器查询 r 查看通用寄存器 sreg 查看段寄存器(es,cs,gs,ss,fs,ds以及idt,gdt,ldt,tr) creg 查看控制寄存器(cr0,cr1,cr2,cr3) dreg 查看调试寄存器(dr0-dr7) 这里再插一句,标志寄存器的查看方法: eflags 0x00000002: id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf    (均为置位) eflags 0x00000046: id vip vif ac vm rf nt IOPL=0 of df if tf sf ZF af PF cf (ZF,PF置位) 0x00000002是标志寄存器的实际数值,后面的zf,sf等为标志位,小写时标志位未置位,大写为已置位。(刚刚用bochs时为这个问题费解了好久。。。) 查看寄存器信息:info cpu/r/fp/sreg/creg 查看堆栈:print-stack 查看内存物理地址内容:xp /nuf addr |eg:xp /40bx 0x9013e 查看线性地址内容:x /nuf addr |eg:x /40bx 0x13e 反汇编一段内存:u start end  |eg:u 0x30400 0x3020D
    转载请注明原文地址: https://ju.6miu.com/read-35441.html

    最新回复(0)