我想知道我是否可以用C编程语言编写一个可执行的程序,尽管不使用单个库调用,例如甚至没有exit()?如果是这样,它显然根本不依赖于库(libc、ld-linux)。 最佳答案 我怀疑你可以写这样的东西,但最后需要有一个无限循环,因为你不能要求操作系统退出你的进程。你不能做任何有用的事情。我们从编译一个ELF程序开始,查看ELF规范并一起制作程序头、程序段和程序所需的其他部分。内核将加载您的代码并跳转到某个初始地址。你可以在那里放置一个无限循环。但是如果不了解一些汇编程序,无论如何从一开始就是没有希望的。start.Sglibc使用的
我有一个几乎只依赖于libc的可执行文件。ldd的输出是:libpthread.so.0=>/lib64/libpthread.so.0(0x00002b53156b9000)libutil.so.1=>/lib64/libutil.so.1(0x00002b53158d5000)librt.so.1=>/lib64/librt.so.1(0x00002b5315ad8000)libdl.so.2=>/lib64/libdl.so.2(0x00002b5315ce2000)libm.so.6=>/lib64/libm.so.6(0x00002b5315ee6000)libc.so.6=
我有一个几乎只依赖于libc的可执行文件。ldd的输出是:libpthread.so.0=>/lib64/libpthread.so.0(0x00002b53156b9000)libutil.so.1=>/lib64/libutil.so.1(0x00002b53158d5000)librt.so.1=>/lib64/librt.so.1(0x00002b5315ad8000)libdl.so.2=>/lib64/libdl.so.2(0x00002b5315ce2000)libm.so.6=>/lib64/libm.so.6(0x00002b5315ee6000)libc.so.6=
我在Ubuntu12.04上构建了一个应用程序,并尝试在嵌入式系统上运行它。我在我的开发机器上运行apt-cacheshowlibc6显示(除其他外)Package:libc6Priority:requiredSection:libsArchitecture:i386Source:eglibcVersion:2.15-0ubuntu10Replaces:belocs-locales-bin,libc6-i386Provides:glibc-2.13-1,libc6-i686嵌入式设备上存在的libc6版本是2.8.90。在设备上的\lib目录中,我有2个库libc-2.8.90.sol
我在Ubuntu12.04上构建了一个应用程序,并尝试在嵌入式系统上运行它。我在我的开发机器上运行apt-cacheshowlibc6显示(除其他外)Package:libc6Priority:requiredSection:libsArchitecture:i386Source:eglibcVersion:2.15-0ubuntu10Replaces:belocs-locales-bin,libc6-i386Provides:glibc-2.13-1,libc6-i686嵌入式设备上存在的libc6版本是2.8.90。在设备上的\lib目录中,我有2个库libc-2.8.90.sol
我遇到了共享库和gcc的问题。起初我无法运行我编译的程序,因为我收到以下错误:加载共享库时出现gcc错误。查了一下,发现是共享库找不到。但是我已经确定共享库位于/usr/local/lib中,AFAICT是共享库的常用目录,应该从一开始就可以使用。我读到您可以设置LD_LIBRARY_PATH,这对我有用。但是,我不希望每次运行我的程序时都设置它。进一步搜索建议编辑ld.so.conf。当我查看它时,它具有以下内容:include/etc/ld.so.conf.d/*.conf查看ld.so.conf.d目录显示了一系列文件,包括libc.conf。该文件中包含以下内容:/usr/
我遇到了共享库和gcc的问题。起初我无法运行我编译的程序,因为我收到以下错误:加载共享库时出现gcc错误。查了一下,发现是共享库找不到。但是我已经确定共享库位于/usr/local/lib中,AFAICT是共享库的常用目录,应该从一开始就可以使用。我读到您可以设置LD_LIBRARY_PATH,这对我有用。但是,我不希望每次运行我的程序时都设置它。进一步搜索建议编辑ld.so.conf。当我查看它时,它具有以下内容:include/etc/ld.so.conf.d/*.conf查看ld.so.conf.d目录显示了一系列文件,包括libc.conf。该文件中包含以下内容:/usr/
我真的很想了解高级代码->可执行文件的步骤..但我遇到了一些困难。我写了一个空的intmain(){}C文件,并试图通过objdump-d破译反汇编。这是正在发生的事情:在_start中,设置对齐方式,将参数压入堆栈,调用__libc_start_main在__libc_start_main中,执行的第一行是jmp*0x8049658但是,在使用objdump-R来检查重定位记录时,0x8049658中的值是__libc_start_main本身!我在这里遗漏了一些东西..编辑:这是一些来源;080482c0:80482c0:ff2558960408jmp*0x804965880482
我真的很想了解高级代码->可执行文件的步骤..但我遇到了一些困难。我写了一个空的intmain(){}C文件,并试图通过objdump-d破译反汇编。这是正在发生的事情:在_start中,设置对齐方式,将参数压入堆栈,调用__libc_start_main在__libc_start_main中,执行的第一行是jmp*0x8049658但是,在使用objdump-R来检查重定位记录时,0x8049658中的值是__libc_start_main本身!我在这里遗漏了一些东西..编辑:这是一些来源;080482c0:80482c0:ff2558960408jmp*0x804965880482
我是第一次尝试CGI脚本,但没有成功。我已经阅读了很多教程并关注了不同论坛中的主题,但我无法使其正常工作。我在Fedora10机器上使用appache网络服务器。我总是有问题[WedOct2120:47:362009][notice]SELinuxpolicyenabled;httpdrunningascontextunconfined_u:system_r:httpd_t:s0[WedOct2120:47:362009][notice]suEXECmechanismenabled(wrapper:/usr/sbin/suexec)[WedOct2120:47:362009][noti