Articles of Linux操作系统

Linux读取()最小数据量

当在Linux中使用read()系统调用来从任何源文件(文件,套接字,pipe道)读取时,是否存在可以返回的最小数据量(在阻塞模式下)? 或者系统调用甚至可以返回1个字节? 当我想从pipe道中读取一个int(4或8字节)时,是否还需要检查read()的返回值以查看是否收到了小于sizeof(int)的字节?

我如何使用select()来监视一个对象?

在这里 ,它说select()用于“监视多个文件描述符,等待一个或多个文件描述符为某类I / O操作(例如,可能的input)”准备好“。 然后,我看了Beej的socket编程指南 ,他们使用select()来监视套接字文件描述符。 简而言之,教程和手册页说select()操作文件描述符 。 不过,我碰到一段使用select()来监视对象的代码 。 码: class SomeObject { public: static SomeObject *_pInstance; //…some other methods… } SomeObject *SomeObject::_pInstance = new SomeObject(); SomeObject &refObj = *SomeObject::_pInstance; fd_set fdAllSet, fdReadableSet; int nReadyHandles = 0; FD_SET( refObj, &fdAllsSet ); //<—this line while (1) { fdReadableSet = fdAllSet; nReadyHandles = select( maxFd+1, &fdReadableSet, […]

Tshark – 不能显示自定义协议的数据

我有一个自定义协议运行在端口8888(不,它不是HTTP),并在TCP之上。 我已经捕获到PCAP文件的数据包的stream量。 问题是,现在我不能只显示它的数据部分。 我试着用下面的命令: tshark -r test.pcap -R 'tcp.port==8888 && tcp.len>0' -T fields -e "tcp.data" 但它显示一个空的string。 tcp.data字段不是保存TCP数据包的那个字段吗? 如何只显示我需要的数据?

如何在makefile中打印输出而不是terminal上的命令行?

我想编写简单的“帮助”选项到我的生成文件,但问题是例如; all: echo "help options.." 当我打电话给terminal,它打印: echo "help options.." help options.. 只能打印?: help options.. 我希望你明白这一点。

如何查看文件的更新内容的整个部分

我有一个在Linux机器上生成日志文件的应用程序。 我想监视生产中的应用程序,所以当我使用带有日志文件名的tail命令时,它只显示更新文件的一部分。 我使用的命令是tail MyLog.log 我的问题是,是否有可能看到更新的文件的最新部分? 有什么build议么?

我在哪里可以find/ dev / random驱动程序的源代码?

我想看看/ dev / random如何创build随机数字。 我知道它使用中断产生的熵,但我仍然希望看到源代码以及它是如何工作的。 谢谢

在静态库中查找静态分配的数据块

我有一个小的静态库( .a )。 在静态库中是一个指向一个大的,静态分配的一维数组的指针。 当我将代码链接到这个库时,指针的地址在各个位置被硬编码,通过反汇编很容易find。 问题是,我想我的代码能够访问这个数组(图书馆是错误的,我想知道为什么)。 当然,通过反汇编,将该地址硬编码到我的代码中,然后重新编译,这将是微不足道的。 这不会是一个问题,除了库可以用不同的方式configuration其他模块,并且数组的指针根据链接的模块而改变。 我有什么select获得该指针? 因为数组的起始状态是可预测的,所以我可以遍历内存,用信号处理程序捕捉段错误,直到find合理的东西。 有没有更好的办法?

为什么我的shellcode不能工作(在Linux中)?

我在下面写了一个小shellcode: #include <stdlib.h> int main() { __asm__("jmp calloffset\n" "poploffset: popl %%esi\n" "movl $1,%%eax\n" "movl $6,%%ebx\n" "int $0x80\n" "calloffset: call poploffset\n" ".string \"/bin/bash\"\n":::"esi"); exit(1); } 当shellcode工作时,它会返回6.实际上,上面的代码运行良好,主函数确实返回了6。 然后我将代码embedded到C程序中: #include <stdlib.h> #include <unistd.h> char shellcode[]="\xeb\x0d\x5e\xb8\x01\x00\x00\x00\xbb\x06\x00\x00\x00\xcd\x80\xe8\xee\xff\xff\xff"; void func() { int * ret; ret=(int *)&ret+0x08; *ret=(int *)shellcode; } int main() { func(); exit(0); } 在正常情况下,代码应该返回6.但是它一直返回0。 我不认为我的代码是错的。 我会告诉你的。 首先,我从gdb得到val ret的地址: (gdb) […]

Linux模块钩住进程function

我有一个问题,也许你有这方面的一些信息。 我想在运行过程中挂接接收函数(recv)并修改传入的数据。 我怎么知道,我可以使用内核模块做到这一点,但我找不到有关如何做这样的钩子的信息。 我尝试了另一种方式,像Netfilter,iptables,但是这些方法要慢一些。

如何在Java中获取170万条logging?

我正在使用MySQL数据库,其中一个表有170万条logging。 通过Java中的Restlet框架,我想获取这些logging并将其返回给客户端。 我正在使用远程服务器的Linux Centos。 我已经创build了WAR文件并上传到服务器上。 当我运行服务时,需要花费很多时间来回应。 我等了40分钟,但没有得到任何输出。 那么有人可以帮我解决这个问题吗?