main 的 ret 指令去哪里了

2024-03-10

我在《Programming from ground up》一书中了解了汇编(x86)如何在全球范围内工作。 在本书中,每个程序都以退出中断调用结束。

然而,在C编译的程序中,我发现程序以ret结尾。这假设有一个地址要弹出,这将导致程序结束。

所以我的问题是: 这个地址是什么? (那里的代码是什么?)


你通过询问来开始你的程序OS将控制权传递给start or _start通过跳转到代码中的该标签来执行程序的功能。在 C 程序中start函数来自 C 库,并且(正如其他人之前已经说过的)执行一些特定于平台的环境初始化。然后启动函数调用你的main控制权是你的。当你从main,它将控制权传递回 C 库,该库正确终止程序并执行特定于平台的操作系统调用将控制权返回给OS.

所以地址 main pops 是来自 C 库的标签。如果你想检查它,它应该在stdlib.h(cstdlib) 你会看到它调用exit进行清理工作。

它的功能是在程序终止或线程终止(C++11)时销毁静态对象(当然是C++)。在 C 情况下,它只是关闭流、刷新缓冲区、调用 atexit 函数并执行以下操作:系统调用.

我希望这是您寻求的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

main 的 ret 指令去哪里了 的相关文章

  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • 如何调试.NET Windows Service OnStart方法?

    我用 NET 编写的代码仅在作为 Windows 服务安装时才会失败 该故障甚至不允许服务启动 我不知道如何进入 OnStart 方法 如何 调试 Windows 服务应用程序 http msdn microsoft com en us l
  • 列表到优先队列

    我有一个 C 大学编程项目 分为两个部分 在开始第二部分时应该使用priority queues hash tables and BST s 我 至少 在优先级队列方面遇到了麻烦 因为它迫使我自己重做第一部分中已经实现的许多代码 该项目是关
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 如果finally 块包含await,为什么*有时*不会在ThreadAbortException 上执行?

    UPDATE 我不认为这个问题是重复的ThreadAbortException最后可以跳过吗 https stackoverflow com questions 18002668 can threadabortexception skip
  • 在 C# 命令行应用程序中包含并执行 EXE

    所以我找到了一个很棒的小 EXE 命令行应用程序 我们将其称为 program exe 它输出一些我想用 C 操作的数据 我想知道是否有一种方法可以将program exe 打包 到我的Visual Studio项目文件中 这样我就可以将编
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 在特定线程上运行工作

    我想要一个特定的线程 任务队列并在该单独的线程中处理任务 应用程序将根据用户的使用情况创建任务并将其排队到任务队列中 然后单独的线程处理任务 即使队列为空 保持线程活动并使用它来处理排队任务也至关重要 我尝试过几种实现TaskSchedul
  • 如何释放字符串未使用的容量

    我正在程序中处理很多字符串 这些字符串数据在读入我的程序后的整个生命周期内都不会改变 但由于 C 字符串保留了容量 因此浪费了大量肯定不会被使用的空间 我尝试释放这些空间 但没有成功 以下是我尝试过的简单代码 string temp 123
  • 展开 std::reference_wrapper 的成本

    Given include
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • 强制函数调用的顺序?

    假设我有一个抽象基类 并且我想要一个必须由派生类实现的纯虚方法 但我想确保派生方法以特定顺序调用函数 我可以做什么来强制执行它 I E base class virtual void doABC 0 virtual void A 0 vir
  • 如何通过API退出Win32应用程序?

    我有一个使用 Win32 API 编写的 C Win32 应用程序 我希望强制它在其中一个函数中退出 有没有类似的东西Exit or Destroy or Abort 类似的东西会终止它吗 哎呀呀呀呀呀呀 不要做任何这些事情 exit 和

随机推荐

  • 如何编写更新查询来更新mongodb中的多个字段?

    如何编写此更新查询来更新 C 中的 mongo 记录 db collection update S Id 110 Name Name1 Batch 43 Date 9 2 2011 Status 0 我正在尝试这样 IMongoUpdate
  • cv::Mat 矩阵,如何减少 cv::Mat 中小数点右侧的数字?

    我有一个应用程序可以在 iPhone 屏幕上打印 3x3 cv Mat 我需要减少小数位 因为屏幕不太大 请参阅 1 004596557012473 0 003116992336797859 5 936915104939593 0 0072
  • 统计每天、上周和上个月的访客点击量

    我制作了一个包含文章的网站 我想计算每篇文章的浏览量以显示最受欢迎的文章 今天 本周和本月 您将如何为此制定数据库架构 如果知道一篇文章的显示次数就足够了 您可以使用如下内容 daily article views article id v
  • JCA 1.6 ResourceAdapter 是否需要 ManagedConnectionFactory?

    我写了一个之前的JCA资源适配器 http code google com p drools jca 然而 现在我发现自己不得不写一篇文章来访问BootstrapContext及其相关的WorkManager 并且有效地没有其他原因 如果我
  • getElementsByTagName 不起作用?

    在下面的代码中 我通过使用 javascript 动态分配 偶数 类给所有偶数行应用不同的背景颜色 我正在调用 body 标记的 alternamte 函数 onload 起初 我使用 getElementById 来获取表对象 并且我的代
  • FIREBASE 警告:用户回调引发异常。错误:发送后无法设置标头

    我们正在开发一个应用程序 我们使用 Firebase 作为数据库 并使用 Express 作为中间件 后端来路由我们的 RESTful API 该 API 供我们在 Reactjs 中开发的前端使用 下面是我们的 server js 文件的
  • 使用 REST Api,如何在我的类型请求模型中包含“任何类型的 json”?

    我正在使用 NET Framework 和 ASP NET Core 创建 REST Web Api 此 Web API 有一个调用 用于获取请求模型以保存数据 以及一些调用 用于稍后检索数据 大多数数据是我在后端需要的结构化信息 它们被保
  • Java 可重入锁和条件 |生产者完成工作,消费者陷入困境

    一般信息 三个读取器线程从文件中随机读取块 每个块都有一个 ID 然后写入普通的 ArrayList 一旦具有所需 ID 的块被添加到列表中 写入线程就会写入输出文件 因此 我编写了一个 BlockingChunkList 它应该同步 ad
  • 为什么 Firefox 拒绝 ttf 字体

    我有来自网络的 ttf 字体 它们在 ftp 客户端 目录中列为 Windows ttf 字体 我在 Mac OSX 平台上的 Firefox 上使用嵌入字体 但收到以下 Web 控制台错误 17 59 49 201 downloadabl
  • Angularjs 和 jquery 无法以我常规的简单形式工作

    我正在学习 Angularjs 并创建了简单的表单 实际上我是 PHP 开发人员 所以我更喜欢使用 php 作为服务器端脚本语言 我无法将数据提交到服务器 我尝试了很多方法 但是如果我尝试使用标准方法 Angularjs 不起作用 那么这些
  • 如何使用 jQuery 进行重定向? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我使用 HTML 表单提交给 jQuery 验证 然后通过 ajax 将信息发送到 PHP 处理页面 一切都 100 正常工作 除
  • Xcode 7.3 不断在空闲状态下构建

    I noticed that Xcode 7 3 always keep building even in idle time This loads CPU much so sometimes it stops responding Doe
  • 异步构造函数

    我怎样才能最好地处理如下情况 我有一个需要一段时间才能完成的构造函数 var Element function Element name this name name this nucleus this load nucleus name
  • 不在范围内:数据构造函数?

    我是哈斯克尔的新手 我遇到这个问题 Assignment12 hs 5 12 不在范围内 数据构造函数 Suit Assignment12 hs 5 18 不在范围内 数据构造函数 Rank Assignment12 hs 6 11 不在范
  • Java简单计算器

    我用Java编写了这个计算器程序 仅当同时计算两个数字时 此方法才有效 这意味着要获得 1 2 3 的总和 您必须这样做 按 1 按 按 2 按 按 按 3 按 计算结果为 6 但我想对此进行编程 以便我可以通过以下方式获得答案 按 1 按
  • 在 Pi 上通过 python 执行 bluetoothctl 命令

    每次我想在我的 pi 上运行 python 脚本之前 我都会在终端上运行一系列 Bluetoothctl 命令 我想从 pi 自动连接到 BLE 设备 无需任何配对确认或用户交互 以下是每次在运行另一个 python 脚本之前重新启动 pi
  • 事务性与非事务性 msmq

    我不断看到文档 http msdn microsoft com en us library ms702030 VS 85 aspx表示不可能发送到事务范围之外的远程事务 msmq 队列 我发现这很难相信 因为我think我已经这样做了好几个
  • 无法将新元数据附加到捕获的图像

    我正在尝试将我自己的一些字段附加到我捕获的图像中 我似乎能够更改现有的 EXIF 条目 但无法添加新条目 无论是在 EXIF 字典中还是作为单独的字典添加到图像中 当我进行添加时 我可以将它们视为图像数据的一部分 但它们永远不会保存到图像文
  • Acumatica 过滤 PXSelector 具有快速搜索功能

    我有一个自定义 dac 和 pxselector 如下所示 With quick search red bordered search I want to filter with every properties For example w
  • main 的 ret 指令去哪里了

    我在 Programming from ground up 一书中了解了汇编 x86 如何在全球范围内工作 在本书中 每个程序都以退出中断调用结束 然而 在C编译的程序中 我发现程序以ret结尾 这假设有一个地址要弹出 这将导致程序结束 所