【linux 程序启动时 glibc 的调用流程】教程文章相关的互联网学习教程文章

linux – ALSA:snd_pcm_writei调用的缓冲区欠载【代码】

在运行我最近从灰烬中带回来的旧程序时,我得到缓冲区欠载. 程序将原始声音文件完全加载到内存中(2100字节长,525帧)并准备ALSA输出(44.1khz,2个通道,16位有符号):if ((err = snd_pcm_set_params(audio_handle,SND_PCM_FORMAT_S16_LE,SND_PCM_ACCESS_RW_INTERLEAVED,2,44100,1,sound.playback_us)) < 0) {printf("E: Failed to prepare PCM: %s\n", snd_strerror(err));return -1; }在首次播放声音之前,PCM状态为PREPARED.声音第一次...

从Linux命令行调用脚本级Python函数【代码】

如何为Linux服务器创建功能和软件?让我更详细地解释一下. 因此,对于我使用SSH客户端访问的Linux服务器,我已经制作了一些工作正常的Python脚本,但我真正想做的就是让这些Python脚本一直处于活动状态,以便我可以执行我已经执行的功能只需在命令行中键入“time”而不是用./script-name.py启动脚本然后键入“time”,就可以在脚本中创建(例如“def time():…”).我是否需要以某种方式将Python文件安装到系统中? 我努力搜索谷歌,因为我...

linux – ARM inline asm:退出系统调用,从内存中读取值【代码】

问题 我想在Linux Android设备上使用内联汇编在ARM中执行退出系统调用,我希望从内存中的某个位置读取退出值. 例 如果不给出这个额外的参数,调用的宏看起来像:#define ASM_EXIT() __asm__("mov %r0, #1\n\t" "mov %r7, #1\n\t" "swi #0")这很好用.要接受一个参数,我将其调整为:#define ASM_EXIT(var) __asm__("mov %r0, %0\n\t" ...

为什么x86-64 Linux系统调用会修改RCX,这个值意味着什么?【代码】

我正在尝试使用sys_brk syscall在linux中分配一些内存.这是我尝试过的:BYTES_TO_ALLOCATE equ 0x08section .textglobal _start_start:mov rax, 12mov rdi, BYTES_TO_ALLOCATEsyscallmov rax, 60syscall根据linux调用约定,我希望返回值在rax寄存器中(指向已分配内存的指针).我在gdb中运行它,在进行sys_brk系统调用之后,我注意到以下寄存器内容 在系统调用之前rax 0xc 12 rbx 0x0 0 rcx ...

Linux中的系统调用机制存在疑问

我们使用’int’或新的’syscall / sysenter’指令从ring3转到ring0.这是否意味着需要为内核修改的页表和其他内容是由’int’指令自动完成的,或者’int 0x80’的中断处理程序将执行所需的操作并跳转到相应的系统调用. 此外,当从系统调用返回时,我们再次需要转到用户空间.为此,我们需要知道用户空间中的指令地址以继续用户应用程序.存储的地址在哪里. ‘ret’指令是否会自动将响铃从ring3更改为ring0或此环更换机制在何处/如何进行?...

linux write和sendfile系统调用之间的差异

我编程webserver(C),它应该发送大文件.我的问题是:两个系统调用的主要区别是:write和sendfile. sendfile是否依赖于套接字系统缓冲区的大小?我注意到写入经常写的少于我要求的. 例如,如果对一个文件有很多请求:我应该打开它,复制到内存中并使用write,或者我可以为每个客户端执行sendfile吗? 提前感谢所有答案.解决方法:请阅读sendfile(2). sendfile()在一个文件描述符和另一个文件描述符之间复制数因为这种复制是在内核中完成的...

生成调用流程图的工具[C C solaris linux]

我非常喜欢IDA,但我在Solaris上就这个项目工作.我确实有一台linux机器,如果与IDA在同一个联盟中没有任何东西,那么我会说服管理层为它购买许可证. 除此之外,我正在寻找替代建议. IDA中的一些其他功能会很方便,但我目前需要的主要功能是不基于源代码的调用流图生成器.如果它需要构建步骤的额外输出,那很好,但我需要查看的一些库我没有源代码. 到目前为止,看起来我最好的选择是Valgrind的Callgrind,lida和gprof.欢迎任何进一步的建议....

Linux,系统调用表,32和x64【代码】

我不明白1.所有Linux机器的系统调用地址是否相同(或者它们依赖于编译选项)2. 3286和x64具有相同的系统调用地址吗?我在网上找到了一些引用,例如swapon有x87地址,但未指定是32位还是64位内核版本解决方法:我认为你在这里混淆了两个非常重要的概念.有两种不同的“地址”可供理解: >实际,在内存地址中.这些将在内核编译之间有所不同,除非故意修复(我不相信它们)将在所使用的编译器之间有所不同.我的发行版中的每个新内核都有不同的系...

linux内核驱动休眠和唤醒机制(select系统调用的内核驱动poll实现)

原文链接:https://blog.csdn.net/yikai2009/article/details/8653842阻塞与非阻塞的概念: 阻塞IO: 当数据不可读或不可写,进程休眠,直到得到数据可读或可写时才返回。阻塞效率高,实时性比较好。 非阻塞IO:不管数据是否可读可写,都马上返回。 应用程序是否能实现阻塞或非阻塞是取决于驱动程序。实际驱动中应该把阻塞和非阻塞这种选择权交给应用程序来选择。要实现这个效果 ,就必须让驱动程序知道应用程序的选择。这个信息是...

linux – 用户线程是否可以直接进入内核而没有被调用的内核线程?

用户线程可以直接进入没有被调用的内核线程的内核吗?我的意思是,用户空间通过异常进入内核,不调用任何内核线程,而是在内核代码中运行.谢谢 !解决方法:是的他们可以.用户线程一直进入内核进行系统调用,中断和异常.当内核处理其中一个时,它在用户线程的上下文中以内核模式运行(并使用该线程的内核堆栈). 实际上,“内核线程”被定义为永不退出内核的计划任务.

linux – 为什么剥离的二进制文件仍然可以在反汇编文件中拥有库调用信息?【代码】

测试平台是32位Linux. 我编译了一个没有条带信息的c程序,并使用objdump来反汇编elf可执行文件. 这是结果的一部分.804831c: e8 8c fe ff ff call 8048360 <printf@plt>如果我使用:strip binary 要删除符号信息并使用objdump再次反汇编elf可执行文件,我仍然可以看到如下结果:804831c: e8 8c fe ff ff call 8048360 <printf@plt>所以我的问题是: 在我删除了所有符号信息之后,像objdump这样的反汇编工具如何知道某些库函数...

seteuid是Linux上的系统调用吗?【代码】

到目前为止,我在setuid上阅读的所有文献都以一种暗示它是系统调用的方式讨论了seteuid.第2节手册页从不说明函数是否是系统调用,因此seteuid(2)没有帮助.如果它不是系统调用,意味着内核不提供功能,那么如何实现“设置有效UID”呢?解决方法:第2节手册页都是系统调用 – 这就是第2节的用途.第3节手册页都是库调用,这就是第3节的用途.有关章节列表及其内容,请参阅man(1)(man本身的手册页):1 Executable programs or shell commands...

linux – 为什么我在调用sys_pause系统调用时收到SIGSEGV?【代码】

我正在尝试创建一个x86_64汇编程序,只要发送SIGTERM信号,就会显示“SIGTERM received”.我的应用程序直接使用Linux系统调用:%define sys_write 0x01 %define sys_rt_sigaction 0x0d %define sys_pause 0x22 %define sys_exit 0x3c%define SIGTERM 0x0f%define STDOUT 0x01; Definition of sigaction struct for sys_rt_sigaction struc sigaction.sa_handler resq 1.sa_flags resq 1.sa_restorer resq ...

linux – 调用clCreateContext时出错CL_DEVICE_NOT_AVAILABLE(Intel Core2Duo,Intel OCL SDK 3.0 beta)【代码】

我正在尝试使用OpenCL(英特尔opencl-1.2-3.0.56860).我设法在Ubuntu 12.05下安装了英特尔的OpenCL SDK(使用“alien”将rpm包转换为* .deb包).现在我尝试运行我的第一个简单的OpenCL程序…要运行程序,我需要使用设置LD_LIBRARY_PATH:export LD_LIBRARY_PATH=/opt/intel/opencl/lib64/我的问题是,在调用clCreateContext(…)时,我总是得到错误“CL_DEVICE_NOT_AVAILABLE”. 这是我的源代码:#include <stdio.h> #include <stdlib.h> ...

《Linux系统调用: clone用法》

一、程序#define _GNU_SOURCE #include <sched.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <malloc.h> #include <sys/types.h> #include <sys/wait.h>int param = 0;int thread_fn(void *data) {int j;printf("starting child thread_fn, pid=%d\n", getpid());for (j = 0; j < 10; j++) {param = j + 1000;sleep(1);printf("child thread running: j=%d, param=%d secs,ppid =...