这是我时常遇到的情况:
对于一个不使用虚拟地址的嵌入式系统,我有一个可执行文件,它是从包含调试信息的C或C++代码编译而来的。它通常以COFF或ELF/DWARF(我把这两个搞混了)格式呈现。
在运行时,在PC上,我想通过变量名确定变量的地址。(例如,“foo.bar [7] .baz”)这允许我读取/写入嵌入式系统上的变量值(给定超出此问题范围的调试协议)。显然,任何基于堆栈或堆的变量都不行,因为它们没有静态地址。
我之前曾经用C++完成过这个工作,解析TI编译器针对其2800系列DSP的COFF文件,那很麻烦。我想知道是否已经有Java库可以做到这种事情,因为我面临着其他处理器的一个或两个可执行文件的同样问题。
更新:(2009年11月18日)一个有希望的线索!
有没有人使用过Eclipse CDT ELF解析器?
(请参阅http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/model/IBinary.html中的其中一个javadoc页面)
TI的Code Composer 4(基于Eclipse)似乎使用了这个,所以如果我能找到文档在哪里,也许我可以用它来解决我的问题。
对于一个不使用虚拟地址的嵌入式系统,我有一个可执行文件,它是从包含调试信息的C或C++代码编译而来的。它通常以COFF或ELF/DWARF(我把这两个搞混了)格式呈现。
在运行时,在PC上,我想通过变量名确定变量的地址。(例如,“foo.bar [7] .baz”)这允许我读取/写入嵌入式系统上的变量值(给定超出此问题范围的调试协议)。显然,任何基于堆栈或堆的变量都不行,因为它们没有静态地址。
我之前曾经用C++完成过这个工作,解析TI编译器针对其2800系列DSP的COFF文件,那很麻烦。我想知道是否已经有Java库可以做到这种事情,因为我面临着其他处理器的一个或两个可执行文件的同样问题。
更新:(2009年11月18日)一个有希望的线索!
有没有人使用过Eclipse CDT ELF解析器?
(请参阅http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc.isv/reference/api/org/eclipse/cdt/core/model/IBinary.html中的其中一个javadoc页面)
TI的Code Composer 4(基于Eclipse)似乎使用了这个,所以如果我能找到文档在哪里,也许我可以用它来解决我的问题。