我是一名系统工程师,最近大学毕业,我刚刚获得了一个非常令人生畏的项目.
我们有一个遗留系统,我们合法拥有整个代码及其所有权利.问题是代码记录不完整,文档不完整,有时错误,原始开发人员不可用.
它使用自定义Perl构建脚本需要CPAN的一千个模块才能工作,我不知道Perl.除了Doxygen之外,反向工程到UML失败了,仅限于继承图和调用图.
我已经获得了一个巨大的黑板,我正在慢慢地浏览代码,建模包,然后在其中嵌套包.
我的问题是我是否正在从正确的方向接近这种逆向工程.我正在从底部工作,试图弄清楚在开发UML和编写设计文档时会发生什么.我做了一个包图,但很难弄清楚在那个高水平上发生了什么.
我提出的一篇学术论文表明,我还制作了一份新的需求文档,这将使我的速度更慢,我不知道这是不是一个好主意,因为其他开发人员总是忙于保持遗留系统.
有没有可以帮助我的书籍,我是从正确的角度接近这个吗?我是否应该聘请了解Perl和JMX的合同工来帮助我?
我是否可以查看行号和文件名(对于我使用ltrace/strace运行的程序)以及库调用/系统调用信息.
例如:
code section :: ptr = malloc(sizeof(int)*5); (file:code.c, line:21)
Run Code Online (Sandbox Code Playgroud)
ltrace或任何其他工具: malloc(20) :: code.c::21
我已经尝试了ltrace/strace的所有选项,但无法找到获取此信息的方法.
如果不能通过ltrace/strace实现,我们是否有GNU/Linux的任何并行工具选项?
int mprotect(const void *addr, size_t len, int prot);
Run Code Online (Sandbox Code Playgroud)
但是在我正在分析的程序上运行ltrace时,我看到mprotect被调用如下:
mprotect(0x8049000, 4096, 3, 1, 0xb7e057ac) = 0
Run Code Online (Sandbox Code Playgroud)
什么是第四和第五个参数?
编辑:使用ltrace版本0.5.和内核2.6.24-24-通用
谢谢
我有简单的C++程序:
#include <iostream>
int main()
{
std::cout << "Hello\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想你不能变得更简单.我正在玩"scratchbox" - 我用来编译ARM平台应用程序的交叉编译平台.我在诺基亚N900手机上运行它.
在研究一些性能问题时,我注意到在开始时有几次调用strcmp().我使用"ltrace"来跟踪库调用,当我在目标(我的手机)上运行它时,看到一系列调用strcmp()现在让我很好奇 - 这些调用的目的是什么?
20:06 user@MaemoBox:~$ ltrace test
__libc_start_main(61732, 1, 0xbed66634, 345616, 345612 <unfinished ...>
__errno_location() = 0x4001d3b0
strrchr("test", '/') = NULL
getuid() = 29999
bsearch("test", 0x00055966, 146, 1, 0x0000ed38 <unfinished ...>
strcmp("test", "mv") = 7
strcmp("test", "sort") = 1
strcmp("test", "tr") = -13
strcmp("test", "sysctl") = 1
strcmp("test", "test") = 0
<... bsearch resumed> ) = 0x000559e2
Run Code Online (Sandbox Code Playgroud)
谢谢.