Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在简单C+;开头的一系列strcmp()调用+;程序 我有简单的C++程序: #include <iostream> int main() { std::cout << "Hello\n"; return 0; } #包括 int main() { std::不能确定,但是否可以是您编写的程序,而不是您编写的程序?例如,如果当前目录中不包含/code>,并且由于它是一个小平台,那么所有test、mv,实际上可能只是一个可执行文件h通过计算正确的程序的名称来模拟正确的程序?参见示例_C++_Linux_Gcc_Ltrace_Re Engineering - Fatal编程技术网 ,并且由于它是一个小平台,那么所有test、mv,实际上可能只是一个可执行文件h通过计算正确的程序的名称来模拟正确的程序?参见示例,c++,linux,gcc,ltrace,re-engineering,C++,Linux,Gcc,Ltrace,Re Engineering" /> ,并且由于它是一个小平台,那么所有test、mv,实际上可能只是一个可执行文件h通过计算正确的程序的名称来模拟正确的程序?参见示例,c++,linux,gcc,ltrace,re-engineering,C++,Linux,Gcc,Ltrace,Re Engineering" />

在简单C+;开头的一系列strcmp()调用+;程序 我有简单的C++程序: #include <iostream> int main() { std::cout << "Hello\n"; return 0; } #包括 int main() { std::不能确定,但是否可以是您编写的程序,而不是您编写的程序?例如,如果当前目录中不包含/code>,并且由于它是一个小平台,那么所有test、mv,实际上可能只是一个可执行文件h通过计算正确的程序的名称来模拟正确的程序?参见示例

在简单C+;开头的一系列strcmp()调用+;程序 我有简单的C++程序: #include <iostream> int main() { std::cout << "Hello\n"; return 0; } #包括 int main() { std::不能确定,但是否可以是您编写的程序,而不是您编写的程序?例如,如果当前目录中不包含/code>,并且由于它是一个小平台,那么所有test、mv,实际上可能只是一个可执行文件h通过计算正确的程序的名称来模拟正确的程序?参见示例,c++,linux,gcc,ltrace,re-engineering,C++,Linux,Gcc,Ltrace,Re Engineering,如果是这种情况,所有的strcmp()基本上都是试图弄清楚它是作为什么运行的可执行文件。解决方案:将程序命名为除test之外的其他名称,或者运行ltrace/test strcmp()调用之前的strrcchr()调用强烈表明,它正在尝试提取可执行文件“basename”,而不带目录。在这种情况下,以“/test”的形式运行它可能不会有帮助,因此您应该将其重命名为唯一的名称(再次猜测一下) 我可能错了,因为从理论上讲,平台在运行可执行文件时可以做任何事情。我不熟悉scratchbox,但如果它类

如果是这种情况,所有的strcmp()基本上都是试图弄清楚它是作为什么运行的可执行文件。解决方案:将程序命名为除
test
之外的其他名称,或者运行
ltrace/test

strcmp()
调用之前的
strrcchr()
调用强烈表明,它正在尝试提取可执行文件“basename”,而不带目录。在这种情况下,以
“/test”
的形式运行它可能不会有帮助,因此您应该将其重命名为唯一的名称(再次猜测一下)


我可能错了,因为从理论上讲,平台在运行可执行文件时可以做任何事情。

我不熟悉
scratchbox
,但如果它类似于
busybox
,我假设它正在比较它的调用名称(
argv[0]
)使用它提供的常用Unix实用程序/功能。如果不匹配,它会将控制权传递给代码。

如果我猜测,我会说代码是为调试器编译的。重新编译为发行版,您可能会看到这些调用消失。嗯,我没有显式使用任何调试选项。我使用gcc重新编译了同一个文件-O3选项-“ltrace”显示完全相同的strcmp()调用序列。@Alexi Try
ltrace./test
(如下面Alok的答案所示)是的,这是我的愚蠢:-)我在看/usr/bin/test的ltrace,这是因为/usr/bin在我的路径上是第一位的。谢谢大家。应用程序是在scratchbox环境中编译的,但是我在目标(手机)上运行二进制文件时得到的跟踪它本身不在scratchbox中。Lukly对我来说,我可以直接在我的手机上运行一些工具,因为它只运行一个小的Linux发行版(Maemo 5)。
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