草庐IT

C 标准 I/O 与 UNIX I/O 基础

这是我的一个非常基本的问题。在我教授的演讲幻灯片中,有一个我不太明白的例子。她写道:printf("u");write(STDOUT_FILENO,"m",1);printf("d\n");...她说这段代码的输出是:mud我不明白。因此,如果有人了解为什么会发生这种情况,请向我解释。引用这个问题:http://lagoon.cs.umd.edu/216/Lectures/lect17.pdf(在幻灯片倒数第二页。) 最佳答案 write是一个系统调用——它由用户模式(像您这样的程序在其中运行)和操作系统内核(在写入字节时处理实际写

C 标准 I/O 与 UNIX I/O 基础

这是我的一个非常基本的问题。在我教授的演讲幻灯片中,有一个我不太明白的例子。她写道:printf("u");write(STDOUT_FILENO,"m",1);printf("d\n");...她说这段代码的输出是:mud我不明白。因此,如果有人了解为什么会发生这种情况,请向我解释。引用这个问题:http://lagoon.cs.umd.edu/216/Lectures/lect17.pdf(在幻灯片倒数第二页。) 最佳答案 write是一个系统调用——它由用户模式(像您这样的程序在其中运行)和操作系统内核(在写入字节时处理实际写

结合静态库

假设我有三个C静态库,比如libColor.a依赖于*libRGB.*a而后者又依赖于libPixel.a。据说库libColor.a依赖于库libRGB.a因为在libColor.a中有一些引用定义在libRGB.a。我如何将上述所有库组合成一个新的独立的libNewColor.a?独立意味着新库应该定义所有符号。因此,在链接时我只需要提供-lNewColor。新库的大小应该是最小的,即它不应该包含libRGB.a中没有被libColor.a等使用的任何符号。我在ar命令(用于创建和更新静态库/文件)中使用各种选项来试试运气。 最佳答案

结合静态库

假设我有三个C静态库,比如libColor.a依赖于*libRGB.*a而后者又依赖于libPixel.a。据说库libColor.a依赖于库libRGB.a因为在libColor.a中有一些引用定义在libRGB.a。我如何将上述所有库组合成一个新的独立的libNewColor.a?独立意味着新库应该定义所有符号。因此,在链接时我只需要提供-lNewColor。新库的大小应该是最小的,即它不应该包含libRGB.a中没有被libColor.a等使用的任何符号。我在ar命令(用于创建和更新静态库/文件)中使用各种选项来试试运气。 最佳答案

c - 过程链接表的用途是什么?

我很好奇为什么会存在程序链接表。它有什么作用?程序集不能直接调用全局偏移表吗?调用PLT比调用GlobalOffsetTable有什么优势?整个过程对我来说仍然有点困惑,我正在尝试弄清楚动态链接的来龙去脉,因此我们将不胜感激。 最佳答案 对于从PIC代码发出的调用,您认为PLT不是真正需要的是正确的。编译器可以很好地生成GOT查找并间接调用从GOT获得的地址。不过,使用PLT往往会使代码的效率稍微提高一些(至少,每次调用的体积膨胀较小),因此通常都会使用它。但是,绝对需要PLT的地方是动态链接的非PIC代码。(通常这只发生在主程序中

c - 过程链接表的用途是什么?

我很好奇为什么会存在程序链接表。它有什么作用?程序集不能直接调用全局偏移表吗?调用PLT比调用GlobalOffsetTable有什么优势?整个过程对我来说仍然有点困惑,我正在尝试弄清楚动态链接的来龙去脉,因此我们将不胜感激。 最佳答案 对于从PIC代码发出的调用,您认为PLT不是真正需要的是正确的。编译器可以很好地生成GOT查找并间接调用从GOT获得的地址。不过,使用PLT往往会使代码的效率稍微提高一些(至少,每次调用的体积膨胀较小),因此通常都会使用它。但是,绝对需要PLT的地方是动态链接的非PIC代码。(通常这只发生在主程序中

c - binutils/bfd.h 现在想要 config.h 吗?

我正在尝试使用BFD库,所以我安装了软件包binutils-dev并包含:#include我正在从我的代码中调用bfd_openr和bfd_close等等。最近我升级了软件包,现在我从这里得到一个错误:bfd.h:/*PR14072:Ensurethatconfig.hisincludedfirst.*/#if!definedPACKAGE&&!definedPACKAGE_VERSION#errorconfig.hmustbeincludedbeforethisheader#endif...我应该包括config.h-但我没有使用autoconf。我是否包含了错误的头文件?你应该如何

c - binutils/bfd.h 现在想要 config.h 吗?

我正在尝试使用BFD库,所以我安装了软件包binutils-dev并包含:#include我正在从我的代码中调用bfd_openr和bfd_close等等。最近我升级了软件包,现在我从这里得到一个错误:bfd.h:/*PR14072:Ensurethatconfig.hisincludedfirst.*/#if!definedPACKAGE&&!definedPACKAGE_VERSION#errorconfig.hmustbeincludedbeforethisheader#endif...我应该包括config.h-但我没有使用autoconf。我是否包含了错误的头文件?你应该如何

c - 在 64 位 x86 平台上比较 PIE、PIC 代码和可执行文件有什么区别?

测试是在Ubuntu12.0464位上进行的。x86架构。我对位置独立可执行文件(PIE)和位置独立代码(PIC)的概念感到困惑,我猜它们不是正交的。这是我的快速实验。gcc-fPIC-piequickSort.c-oa_pie.outgcc-fPICquickSort.c-oa_pic.outgcca.outobjdump-Dr-j.texta.out>a1.tempobjdump-Dr-j.texta_pic.out>a2.tempobjdump-Dr-j.texta_pie.out>a3.temp我有以下发现。A.a.out包含一些PIC代码,但只抵制在libcprologue和

c - 在 64 位 x86 平台上比较 PIE、PIC 代码和可执行文件有什么区别?

测试是在Ubuntu12.0464位上进行的。x86架构。我对位置独立可执行文件(PIE)和位置独立代码(PIC)的概念感到困惑,我猜它们不是正交的。这是我的快速实验。gcc-fPIC-piequickSort.c-oa_pie.outgcc-fPICquickSort.c-oa_pic.outgcca.outobjdump-Dr-j.texta.out>a1.tempobjdump-Dr-j.texta_pic.out>a2.tempobjdump-Dr-j.texta_pie.out>a3.temp我有以下发现。A.a.out包含一些PIC代码,但只抵制在libcprologue和