反汇编作用:一句话,找bug。
步骤:
1.打开VxWorks Development Shell
2.找到WindRiver Workbench安装目录下的反编译可执行文件objdumppentium.exe,我的是在C:\WindRiver\gnu\4.1.2-vxworks-6.8\x86-win32\bin下,在Shell里执行该exe,设置参数<-D>(表示反编译所有),填写镜像路径,并将反汇编输出的文件保存到txt中。(我这儿在桌面放了一个名为vx的文件夹,镜像和目标txt均放于此。)
执行语句如下:
C:\WindRiver\gnu\4.1.2-vxworks-6.8\x86-win32\bin>objdumppentium.exe -D C:\Users\Administrator\Desktop\vx\vxWorks >C:\Users\Administrator\Desktop\vx\vxWorks.txt
或者可以一步步来,先打开C:\WindRiver\gnu\4.1.2-vxworks-6.8\x86-win32\bin,(我的workbench安装在C盘根目录下),按Tab键找到objdumppentium.exe执行,再按出来的提示输入参数和待反汇编的镜像,执行过程如下:
文字版粘贴如下:
C:\WindRiver>cd C:\WindRiver\gnu\4.1.2-vxworks-6.8\x86-win32\bin
C:\WindRiver\gnu\4.1.2-vxworks-6.8\x86-win32\bin>objdumppentium.exe
Usage: objdumppentium.exe
这样反汇编的内容就被保存到VxWorks.txt里了。
再根据程序出错时报的page fault中的Program Counter即可找出对应的出错汇编语句。
例如
Page Fault
Page Dir Base : 0x01a91000
Esp0 0x0366978c : 0x00000216, 0x0366991c, 0x0366984c, 0x00000003
Esp0 0x0366979c : 0x0034f7a8, 0x0625ab11, 0x00000064, 0x00000004
Program Counter : 0x003452d8
Code Selector : 0x00000008
Eflags Register : 0x00010202
Error Code : 0x00000002
Page Fault Addr : 0x00000064
Task: 0x1b08010 "tShellRem56985404"
根据Program Counter : 0x003452d8能够找到出错语句的所在的函数或大致行数,再利用简单的汇编语句知识即可对应到源码上去。当然Page Fault中的Task也可以为你指明发生错误的任务,这样都有利于缩小排查范围。
想要对VxWorks反汇编有更多了解,详见Wind River官方手册《The gnu Binary Utilities》。手册在安装路径下,路径粘贴如下:"$installDir(请自行更改安装路径,如C:\WindRiver)\docs\extensions\eclipse\plugins\com.windriver.ide.doc.wr_gnu_compiler\wr_gnu_compiler_binary_utilities_4.1.2 > The gnu Binary Utilities"