凌晨 05:00 的肮脏黑客攻击。通过在同一个进程的线程之间使用 FIFO 传递指针的地址,我犯了罪,所以:
total_buf = (char*)malloc(msize);
// ...
long addr = (long)&total_buf;
// ...
write(fifo, buf, 128);
在接收线程中接收到指向 total_buf 的指针后,void* pt = (void*)addr;char* tbuf = (char*)pt;
我注意到缓冲区内容发生了变化,并且通过检查内存内容可以清楚地确认这一点(gdb) x/1024xb tbuf
:
发生这种情况的可能原因是什么 - 在多线程 Qt+pure pthreads 应用程序的插件试图直接通信的上下文中?出于某种原因,我觉得这不是一些明显的垃圾收集,而且公平,Linux 线程正在使用共享进程内存,所以它没有地址不匹配,并且指针取消引用看起来也不错。