逆向时如何找到MingGW(GNU)编译程序的main函数

news2024/9/29 11:35:10

编译器是MingGW生成的可执行文件的显著特点是, 最终运行ZwContinue后程序就莫名其妙启动了, 也找不到main函数。
在这里插入图片描述
为了探究里面究竟怎么回事, 我找到了wrk-v1.2的源码, 其中包含了ZwContinue的实现, 首先先看一下注释, API界面包含了2个参数, 其中让人感兴趣的是PCONTEXT, 这是一个线程上下文环境, 其中包含了线程的执行环境, 也许main函数主线程就是位于这个上下文环境中。
先忘了原本的目的, 既然都来了, 看一下这个API的实现。
在这里插入图片描述
其中ZwContinue实现里, 实际上只是简单调用了_KiContinue
在这里插入图片描述
看一下KiContinue的调用界面:
在这里插入图片描述
首先其将IRQL提升到APC_LEVEL, 根据之前的用户模式来决定如何把线程上下文拷贝到内核框架, 如果之前是内核态就直接拷贝, 否则就调用KiContinuePreviousModeUser来拷贝。
在这里插入图片描述
看一下KiContinuePreviousModeUser, 其调用KeContextToKframes把线程上下文环境保存到KTRAP_FRAME上。所以其内部还是调用了KeContextToKframes。唯一的区别就是一个PreviousMode是KernelMode, 另一个是UserMode。
在这里插入图片描述
KeContextToKFrames把KTRAP_FRAME的内容保存到xmm寄存器后, 调用了KxContextToKframes
在这里插入图片描述
接着看一下KxContextToKframes的界面, 这个API才是真正把CONTEXT拷贝到KTRAP_FRAME上
在这里插入图片描述
看一下它的部分代码:
在这里插入图片描述
话题转回来。所以现在可以知道的ZwContinue是为了把线程上下文拷贝到TrapFrame上。方便让线程继续运行。所以我猜测ZwContinue中的CONTEXT, 其中EIP指向的就是main函数。
首先找到CONTEXT内容:
在这里插入图片描述
往下一拉, 就能找到对应的main函数的入口点。
在这里插入图片描述
找到0x4012A0, 然后这个call就是
在这里插入图片描述
进去之后首先是C/C++运行时库的代码:
在这里插入图片描述
可以看到非常明显的C/C++运行时库的代码, 蓝色框的就是main函数了。
在这里插入图片描述
最后在看一眼
在这里插入图片描述
(完)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/837538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git merge 和rebase区别

Merge the incoming changes into the current branch 找到两个分支的祖先 commit,然后将公共分支最新版合并到自己的分支,形成一个新的 commit 提交,用图表示如下。 Rebase the current branch on top of the incoming Rebase 则是重新基于…

蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

蓝桥杯上岸每日N题第八期(全球变暖)!!! 同步收录 👇 蓝桥杯上岸必背!!!(第五期BFS) 大家好 我是寸铁💪 冲刺蓝桥杯省一模板大全来啦 🔥 蓝桥杯4月8号就要开始了 &am…

JVM内存模型结构

什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一个虚构出来的计算机,有着自己完善的硬件架构,如处理器、堆栈等。 为什么需要JVM? Java语言使用Java虚拟机屏蔽了与具体平台相关的信息&…

9 多进程编程

文章目录 进程以及状态进程进程的状态linux下的进程管理pstopbgkillcrontab 进程的创建两个while同时运行示例获取进程pidProcess 结构给子进程指定的函数传递参数进程间是否共享全局变量补充 进程间通信-Queue常用操作Queue 实例 管道通信(了解)样例 进…

PDM系统的项目跟踪功效

在现代企业管理中,项目跟踪是一个至关重要的环节。PDM系统(Product Data Management,产品数据管理)作为一款强大的数字化工具,为企业提供了高效的项目跟踪优势。让我们一同深入探讨,看看PDM系统是如何通过项…

JavaWeb 手写Tomcat底层机制

目录 一、Tomcat底层整体架构 1.简介 : 2.分析图 : 3.基于Socket开发服务端的流程 : 4.打通服务器端和客户端的数据通道 : 二、多线程模型的实现 1.思路分析 : 2.处理HTTP请求 : 3.自定义Tomcat : 三、自定义Servlet规范 1. HTTP请求和响应 : 1 CyanServletRequest …

提高测试用例质量的6大注意事项

在软件测试中,经常会遇到测试用例设计不完整,用例没有完全覆盖需求等问题,这样往往容易造成测试工作效率低下,不能及时发现项目问题,无形中增加了项目风险。 因此提高测试用例质量,就显得尤为重要。一般来说…

SQL基础复习与进阶

SQL进阶 文章目录 SQL进阶关键字复习ALLANYEXISTS 内置函数ROUND(四舍五入)TRUNCATE(截断函数)SEILING(向上取整)FLOOR(向下取整)ABS(获取绝对值)RAND&#x…

采用 SpringDoc、javadoc 无注解零入侵基于java注释

今天在gitee上学习到一个,个人觉得非常使用的功能。就是采用 SpringDoc、javadoc 无注解零入侵基于java注释,只需把注释写好 无需再写一大堆的文档注解了。 下面是源码的地址 RuoYi-Vue-Plus: 后台管理系统 重写RuoYi-Vue所有功能 集成 Sa-TokenMybati…

【数模】预测模型

一、灰色系统 白色系统:系统信息完全明确灰色系统:系统部分信息已知,部分信息未知 对在一定范围内变化的、与时间有关的灰色过程进行预测。过程:原始数据找规律→生成强规律性的数据序列→建立微分方程来预测未来趋势 黑色系统&a…

企业上云实施路线图

企业上云步骤主要分为规划、设计、实施、验证、运维五个阶段。https://articles.e-works.net.cn/cloud/article144684.htm

idea 2023 新版ui中git的相关操作

前两个月换了新电脑,下了最新版的idea发现可以切换一套新的ui了 切换新ui肯定不太习惯,很多操作都得重新摸索一下 在这里记录几个git相关的操作 忽略我下面截图中当前项目是js的后端项目…… 切换ui 首先说一下怎么切换新旧版ui,我这里就…

【前端实习生备战秋招】—CSS面试题汇总,建议收藏系列

【前端实习生备战秋招】—CSS面试题汇总,建议收藏系列 文章目录 【前端实习生备战秋招】—CSS面试题汇总,建议收藏系列一、CSS基础1. CSS选择器及其优先级2. CSS中可继承与不可继承属性有哪些3. display的属性值及其作用4. display的block、inline和inli…

2023年电赛A题报告模板--可直接使用

任务 图1 任务内容 要求 图2 基本要求内容 图3 发挥部分内容 说明 图4 说明内容 评分标准 图5 评分内容 正文 (部分) 摘要 本实验旨在设计和制作一个由两个单相逆变器组成的并联系统,用于为电阻负载供电或并入220V电网。采用基于STM…

MobaXterm - 使用技巧

MobaXterm - 使用技巧 介绍安装SSH会话保存密码快捷键 介绍 MobaXterm是一款增强型Windows终端、X 服务器和 Unix 命令集(GNU/ Cygwin)工具箱。有点是功能全,免费,有便携版,支持多标签,同时自带文件传输系统。下文介绍其安装和使…

产险精算GLM-GAM案例

继续使用北美产险精算学会CAS网站上的一个案例,对案例略作修改后进行验证。 ClassAOITerrExposureClaims1Low1762Medium1108443High11791054Low2130625Medium2126826High21291207Low3143848Medium31261019High34046 GLM 模型结果,见文章:产…

特斯拉墨西哥工厂风波:2.5万美金的车型何时开造?

作者 | Amy 编辑 | 德新 去年10月,马斯克闪现墨西哥新莱昂州,会见了当地官员。考虑到新莱昂州是通用和现代工厂所在地,特斯拉第五大工厂花落墨西哥的消息不胫而走。 今年3月,特斯拉正式宣布,将在墨西哥北部新莱昂州的…

新手用户选择阿里云服务器地域、实例、带宽、操作系统经验参考

无论是个人还是企业用户,部署自己的网站或者APP客户端、小程序等,都需要用到服务器,现在流行的都是使用云服务器,考虑到性价比大家现在都喜欢选择阿里云服务器。但是新手用户往往在面对阿里云服务器地域、实例、带宽、操作系统等众…

Redis集群部署教程详解

一、什么是redis集群 Redis集群是一个提供在多个Redis节点之间共享数据的程序集。它并不像Redis主从复制模式那样只提供一个master节点提供写服务,而是会提供多个master节点提供写服务,每个master节点中存储的数据都不一样,这些数据通过数据分…

sql语句字符函数,数学函数

一、trim()去掉前后单元格 SELECT LENGTH(TRIM( 张三 )) AS 姓名 trim(aa from bb) 除掉bb中前后包含的aa,中间的保留 SELECT TRIM(班 FROM class) AS 姓名 FROM user_test 二、lpad()用指定字符做左…