context:
OS:Linux saturn2-sfu-eng 4.14.172.saturn2-sfu-r2.2.1.3 #1 Sat May 11 08:47:16 UTC 2024 mips GNU/Linux
arch:mips 32
进程加载时在ld.so的LIBC_START_MAIN函数里跑飞了,概率性,加打印,显示没进__libc_csu_init 函数,但在__libc_csu_init 函数之前加的打印有输出,在其后加的打印没有输出。
另外,诡异的是在__libc_csu_init 里只要一加printf或者别的什么语句,问题就不复现了。
在__libc_csu_init 之前加打印,输出__libc_csu_init 函数在内存中的机器码,加上就复现不了。
没有GDB等手段,通过ps或者ls /proc查不到该进程。
该如何调试?
在glibc官方库issue系统中report了bug,但回复说不相干。
https://sourceware.org/bugzilla/show_bug.cgi?id=31732
代码如下:
```c
if ((pid = fork()) < 0)
{
ASSERT(0);
}
// In child process
if (0 == pid)
{
setpriority(0, 0, (INT32)priority - 20);
sprintf_s(priStr, sizeof(priStr), "%d", priority);
sprintf_s(stackStr, sizeof(stackStr), "%d", stackSize);
paraList[0] = (CHAR*)execFileName;
paraList[1] = "-p";
paraList[2] = priStr;
paraList[3] = "-s";
paraList[4] = stackStr;
paraList[5] = NULL;
execve(execFileName, paraList, env);
}