Articles of c + +

为什么这个ptrace程序说系统调用返回-38?

除了我正在运行execl("/bin/ls", "ls", NULL);之外,它和这个一样execl("/bin/ls", "ls", NULL); 。 结果显然是错误的,因为每个系统调用返回-38 : [user@ test]# ./test_trace syscall 59 called with rdi(0), rsi(0), rdx(0) syscall 12 returned with -38 syscall 12 called with rdi(0), rsi(0), rdx(140737288485480) syscall 9 returned with -38 syscall 9 called with rdi(0), rsi(4096), rdx(3) syscall 9 returned with -38 syscall 9 called with rdi(0), rsi(4096), rdx(3) syscall […]

GDB没有这样的文件或目录

我正在关注OpenSecurityTraining的这些经验教训。 我已经到了实验室,在那里我要用CMU炸弹训练自己。 他们提供了一个x86_64编译的CMU炸弹,你可以在这里find: CMU炸弹x86-64最初来自CMU实验室计算机系统:程序员的视angular(CS:APP)第一版 32位炸弹。 我有一个虚拟化的64位基本操作系统发行版,我可以毫不费力的使用GDB反汇编CMU Bomb。 现在,我有一个64位的Ubuntu 14.04 LTS(未虚拟化),当我试图重现为什么我做了我的基本操作系统,我得到了着名的错误。 我运行这些命令: gdb ./bomb-x64 (gdb) b main Breakpoint 1 at 0x400dbd: file bomb.c, line 37. — why bomb.c ? (gdb) r … bomb.c: no such file or directory 编辑:我可以在CMU炸弹的其他function上创build断点,并按预期工作。 例如: (gdb) b phase_1 Breakpoint 3 at 0x400f00 (gdb) r Breakpoint 1, 0x0000000000400f00 in phase_1 () (gdb) […]

/ proc / sys / kernel / sched_child_runs_first是否工作?

我知道在/proc/sys/kernel/sched_child_runs_first中设置一个非零值会强制subprocess在父进程之前运行。 不过,我认为这似乎没有奏效。 这是我的代码: #include <stdio.h> #include <sys/types.h> int main(int argc, char **argv) { pid_t child_pid; switch(child_pid = fork()) { case 0: printf("In Child\n"); exit(0); case -1: printf("Could not fork()\n"); default: printf("In parent\n"); } return 0; } 我得到的输出总是: In parent In Child 我在这里期待什么错吗? PS:我只是试着看看它是否有效,所以请不要提出其他的同步机制,或者为什么这是一个坏主意,等等。

单声道替代名为Mutex

在Windows / .NET上,可以使用命名的Mutex来同步多个进程。 不幸的是,Mono在Linux上不太支持。 他们的发行说明说,Linux不支持这个Windowsfunction,它将是不可靠的模拟它。 无论如何,似乎最好避免build议的入侵。 那么有什么build议的select? 我需要使我的程序安全地同时运行,只有一小段需要与其他实例同步。 该应用程序最终需要部署在Ubuntu Linux与Mono 2.10,但为了testing,将不胜感激,如果它也适用于.NET 4的Windows 7。

如何使用具有Boost Asio套接字的特定networking接口/ Ip?

我有一个Debian / Linux服务器有几个IP地址,全部分配到同一个物理网卡。 /etc/network/interfacesconfiguration文件看起来像这样(xx代表数字) auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 176.xx.xx.144 netmask 255.255.255.0 network 176.xx.xx.0 broadcast 176.xx.xx.255 gateway 176.xx.xx.254 auto eth0:0 allow-hotplug eth0:0 iface eth0:0 inet static address 46.xx.xx.57 netmask 255.255.255.255 broadcast 46.xx.xx.57 auto eth0:1 allow-hotplug eth0:1 iface eth0:1 inet static address 94.xx.xx.166 netmask 255.255.255.255 broadcast 94.xx.xx.166 //IPv6 […]

使用dlopen和dlsym使用-fPIC编译C程序

我有一个错误的符号parsing的问题。 我的主程序用dlsym加载了一个dlopen共享库和一个来自它的符号。 程序和库都是用C库代码编写的 int a(int b) { return b+1; } int c(int d) { return a(d)+1; } 为了使它在64位机器上工作,-fPIC在编译时传递给gcc。 该计划是: #include <dlfcn.h> #include <stdio.h> int (*a)(int b); int (*c)(int d); int main() { void* lib=dlopen("./libtest.so",RTLD_LAZY); a=dlsym(lib,"a"); c=dlsym(lib,"c"); int d = c(6); int b = a(5); printf("b is %dd is %d\n",b,d); return 0; } 如果程序不是用-fPIC编译的话,一切运行正常,但是当用-fPIC编译程序时,程序崩溃时会出现分段错误。 调查发现,坠机是由于符号a的错误parsing。 当调用a时会发生崩溃,无论是从库还是主程序(后者通过在主程序中注释掉调用c()的行来获得)。 […]

请解释这个链接错误:在.rodata节中引用

我正在做一个32位SLES10机器。 使用GCC 3.4.2 这是一个示例错误 `.L8245' referenced in section `.rodata' of CMakeFiles/myproj.dir/c++/util/MyObj.o: defined in discarded section `.gnu.linkonce.t._ZN5boost9re_detail9reg_grep2INS0_21grep_search_predicateIPKcSaIcEEES4_cNS_12regex_traitsIcEES5_S5_EEjT_T0_SA_RKNS_14reg_expressionIT1_T2_T3_EEjT4_' of CMakeFiles/myproj.dir/c++/util/MyObj.o

Linux串行端口:阻塞读取超时

我已经学习了许多有用的线程和一些教程,但我仍然有一些应该是非常简单的问题。 这里有一些我已经读过的线索供参考: 如何在读取函数调用中实现超时? 如何从C中的串口打开,读取和写入 无论如何,我有一个问题。 我的代码工作正常,如果我收到数据。 如果我不这样做,read()函数就会停止,唯一的办法就是使用kill -9(注意:我使用信号处理来向读取串行数据的线程发送信号来终止。肇事者,read()调用仍然停止,即使我已经删除了我的信号处理)。 我想要做的是读取一次阻塞并读取块(因此节省CPU使用),但是如果读取没有收到数据,我不想超时。 以下是我正在应用到端口的设置: struct termios serial_struct; serial_struct.c_cflag = B115200 | CS8 | CLOCAL | CREAD; serial_struct.c_iflag = IGNPAR; serial_struct.c_oflag = 0; serial_struct.c_lflag = 0; serial_struct.c_cc[VTIME] = 1; // timeout after .1s that isn't working serial_struct.c_cc[VMIN] = 64; // want to read a chunk of 64 bytes at a […]

如何让C程序等待(在Linux上)?

如何让C程序等待(在Linux上)? (我需要用MPI等待 – 我需要C代码)

使用C ++在Linux中更改当前目录

我有以下代码: #include <iostream> #include <string> #include <unistd.h> using namespace std; int main() { // Variables string sDirectory; // Ask the user for a directory to move into cout << "Please enter a directory…" << endl; cin >> sDirectory; cin.get(); // Navigate to the directory specified by the user int chdir(sDirectory); return 0; } 这段代码的目的很明显:将用户指定的目录设置为当前目录。 我的计划是对其中包含的文件进行操作。 […]