有没有办法让 gcc 输出原始二进制文件?

2024-03-22

是否有一组命令行选项可以说服 gcc 从独立的源文件生成平面二进制文件?例如,假设 foo.c 的内容是

static int f(int x)
{
  int y = x*x;
  return y+2;
}

没有外部引用,没有任何内容可以导出到链接器。我想要一个小文件,其中仅包含此功能的机器指令,没有任何其他装饰。有点像 (DOS) .COM 文件,但 32 位保护模式除外。


试试这个:

$ gcc -c test.c     
$ objcopy -O binary -j .text test.o binfile

您可以确保它是正确的objdump:

$ objdump -d test.o 
test.o:     file format pe-i386


Disassembly of section .text:

00000000 <_f>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   83 ec 04                sub    $0x4,%esp
   6:   8b 45 08                mov    0x8(%ebp),%eax
   9:   0f af 45 08             imul   0x8(%ebp),%eax
   d:   89 45 fc                mov    %eax,-0x4(%ebp)
  10:   8b 45 fc                mov    -0x4(%ebp),%eax
  13:   83 c0 02                add    $0x2,%eax
  16:   c9                      leave  
  17:   c3                      ret  

并将其与二进制文件进行比较:

$ hexdump -C binfile 
00000000  55 89 e5 83 ec 04 8b 45  08 0f af 45 08 89 45 fc  |U......E...E..E.|
00000010  8b 45 fc 83 c0 02 c9 c3                           |.E......|
00000018
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法让 gcc 输出原始二进制文件? 的相关文章

  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 如何通过 DOS 批处理命令发送电子邮件?

    我在 DOS 中有一个批处理文件 可以进行一些检查 完成后我需要发送一封电子邮件 我在 interwebz 上找到了一些解决方案 但大多数都是第三方的 或者只是在 Outlook 中打开新邮件 我需要命令来发送完整的电子邮件 而无需任何人工
  • GCC:分段错误和调试程序仅在优化时崩溃

    这是线程的后续内容 C 分段错误 也许 GDB 在骗我 https stackoverflow com questions 22828609 c segmentation fault and maybe gdb is lying to me
  • 在 gcc 中强制执行 C++98 标准

    我有一项学校作业应该用符合 C 98 的代码编写 我怎样才能强迫g 仅接受遵循此标准的代码 将要 std c 98做这个技巧还是我需要添加额外的标志 Per GCC 标准文档 http gcc gnu org onlinedocs gcc
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • Python 无法在 git bash 命令行中工作

    Python 不会在 git bash Windows 中运行 当我在命令行中输入 python 时 它会将我带到一个空行 而不会像在 Powershell 中一样显示它已输入 python 2 7 10 它没有给我错误消息 但 pytho
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • Visual Studio:如何正确构建和指定 x64 和 x86 的配置和平台

    使用 Visual Studio 2012 Professional 和 Ultimate 以及所有最新更新 如何正确指定配置和平台以正确构建 x86 和 x64 当您第一次创建 Winforms 应用程序时 Visual Studio 会
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 在汇编中,指令指定数据类型吗?

    我是汇编语言编程 x86 的初学者 以下说法是否正确 在汇编中 BYTE WORD DWORD 等数据类型分别表示 8 位 16 位和 32 位模式 而不仅仅是整数 它们本身没有意义 它们只是位模式 使用它们的指令赋予了它们意义 汇编 代码
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 汇编程序中的过程调用如何工作?

    我刚刚开始摆弄 ASM 我不确定我对过程调用的理解是否正确 假设代码中的某个时刻有一个过程调用 call dword ptr 123 该过程仅包含一个命令 ret ret 0004 该过程调用的效果是什么 返回值将存储在哪里 我在某处读到

随机推荐

  • Postgresql ON sqlalchemy 中的冲突

    我读过很多资源 ao 1 https bitbucket org zzzeek sqlalchemy issues 3529 support postgres 95 on conflict upserts 2 https stackover
  • 在闪亮的主面板中右对齐元素

    我有一个闪亮的应用程序 左侧有一个侧边栏 我想将 mainPanel 中的绘图向右对齐 我尝试过添加style align right mainPanel 中的每个元素 以及包装我能想到的所有内容div style align right
  • 适用于嵌入式设备的良好串行通信协议/堆栈? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在为各种项目编写了几个不同的自定义串行协议后 我开始对每次重新发明轮子感到沮丧 我一直在寻找更通用的解
  • Powershell Invoke-Sqlcmd 登录失败

    我正在尝试从 Windows SQL Server 2008 R2 的 powershell 运行 sql 查询 代码似乎无法通过 SQL Server 身份验证凭据来正确运行 sqlcmd 我直接从 powershell 运行第一部分 而
  • ExtJS AJAX 另存为对话框

    我发出 ExtJS AJAX 请求 并且希望向用户显示标准浏览器 另存为 对话框 要下载的文件可以是 pdf jpg 或 png 文件 目前 AJAX 请求已成功提交 但由于它是异步的 因此不会出现对话框 我可以简单地不使用 AJAX 但是
  • udp数据包被tcpdump捕获,但没有被套接字接收[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我编写了一个 rawudp 程序 通过原始套接字发送 udp 数据包 按照网页http www tenouk com Module43a html h
  • 使用 Zend Framework 渲染站点范围元素的最佳方法

    我正在使用 模块 前端控制器资源进行项目设置 渲染站点范围元素 例如导航 的最佳方法是什么 Add the action which renders the element to the end of the action stack ea
  • 无法从 virtualenv 导入包

    我的项目中有一个一行脚本 它导入一个包 flask mail 我在 virtualenv 中运行它 如果我执行python script py I get ImportError No module named flask mail 如果在
  • 无法将映像推送到配置为代理缓存的 docker 注册表

    我跟着this http blog docker com 2015 10 registry proxy cache docker open source 设置 Docker v2 注册表作为 Docker Hub 映像的本地代理缓存的指南
  • git中的用户访问控制

    我有一个简单的问题 我们使用 Bitbucket 作为 git 提供者 假设我是一个开发团队的经理 我希望自己成为唯一可以将代码合并到 master 分支的人 其他团队成员可以签出主分支并创建新分支 但他们无法将代码合并到主分支 我怎样才能
  • 将 pandas 数据框转换为列表

    我有一个熊猫数据框 apple banana carrot diet coke 1 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 1 0 我想将其转换为以下内容 apple banana carrot
  • 如何重置 iOS 9 通用链接设置?

    在我的 iOS 9 应用程序上测试通用链接时 我不小心点击了 mywebsite com gt 右上角 这使得应用程序再次导航到网站 现在我似乎无法再次使通用链接起作用 似乎 iOS 已经记住了我的偏好 即我希望看到在 Safari 而不是
  • SQL Server 中的 DateTime2 与 DateTime

    哪一个 datetime https msdn microsoft com en us library ms187819 aspx datetime2 https msdn microsoft com en us library bb677
  • 撰写:LazyColumn 在单个项目更新时重组所有项目

    我正在尝试使用 LazyColumn 在列表中显示订单列表 这是代码 Composable private fun MyOrders orders List
  • 龙卷风 vs wsgi(带gunicorn)

    I read this http rz scale it pl 2013 01 25 tornado the best web framework html关于龙卷风 另一方面 如果您已经有 WSGI 应用程序并且想要运行它 在速度极快的t
  • 处理 iOS 10 中的 AutoLayout 约束动画差异?

    我注意到在 iOS 10 Beta 5 即将尝试 Beta 6 中 AutoLayout 约束动画的行为有点不同 例如 此方法的工作方式与之前的 iOS 版本不同 view addConstraints constraints view s
  • 如何在 autoconf 配置脚本/makefile 中添加到库的链接

    我是一个自动工具新手 我很难轻松地弄清楚如何做 将特定库链接到配置的目标之一 我有一个源包 我想用通常的方式构建 configure make make install 不幸的是 其中一个 cpp 缺少对另一个库的引用 手动编译它 调整命令
  • Spray 如何找到资源 - 例如javascript

    使用 Spray io 构建我的第一个 Servlet 非常简单 但从未找到标头中引用的资源 头 gt 这些资源必须放在哪个目录中 或者如何引导喷雾去那里查找 简单的问题 但我无法弄清楚 非常感谢 Girgl 对于 Spray 路由 我使用
  • 是否可以解构 ValueTuple 参数?

    是否可以解构一个不是从方法返回但作为输出参数的元组 我不确定我是否正确表达了自己的意思 甚至不确定是否使用了正确的术语 所以这里有一些例子 void OutMethod out int aNumber string someText out
  • 有没有办法让 gcc 输出原始二进制文件?

    是否有一组命令行选项可以说服 gcc 从独立的源文件生成平面二进制文件 例如 假设 foo c 的内容是 static int f int x int y x x return y 2 没有外部引用 没有任何内容可以导出到链接器 我想要一个