逆向基础:32位软件逆向技术

2023-10-26

    在编写win32应用程序时、都必须在源码里实现一个WinMain函数。但windows程序的执行并不是从WinMain函数开始的,首先被执行的是启动函数的相关代码,这段代码是由编译器生成的。

启动源代码:crt\src\wincmdln.c中

调用WinMain的示例

程序启动代码的汇编代码

函数的识别
编译器都使用call和ret指令来调用函数及返回调用位置。
call指令与跳转指令功能类似。不同的是,call指令保存返回信息,即将其之后的指令地址压入栈的顶部,当遇到ret指令时返回这个地址。


函数的参数

函数传递参数有3种方式,分别是栈方式、寄存器方式及通过全局变量进行隐含参数传递的方式

栈方式:注意栈平衡、按照什么顺序把参数压入栈?

 栈操作的对象只能是双操作数(占4字节)。

 

 

 有时,编译器优化,会直接通过esp对参数进行寻址。

 

 

 按寄存器传参数:

 

   

函数的返回值
    函数被调用执行后,将向调用者返回1个或多个执行结果,称为函数返回值。返回值最常见的形式是return操作符,还有通过参数按传引用方式返回值、通过全局变量返同值等。

用return操作符

函数的返回值放在eax寄存器中返回,如果处理结果的大小超过eax寄存器的容量,其高32位就会放到edx寄存器中。

局部变量

 

 

 

 没有sub esp,4  分配局部变量;而是push ecx,再用[ebp-4]访问局部变量,效果一样,都让esp-4

 全局变量:

全局变量一般在.data区块的一个固定地址

数组:

 

 

 

 

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

逆向基础:32位软件逆向技术 的相关文章

  • 查询列出数据库中每个表的记录数

    如何列出数据库中每个表的行数 一些相当于 select count from table1 select count from table2 select count from tableN 我将发布一个解决方案 但欢迎其他方法 如果您使用
  • 如何在 H2 中创建过程

    这似乎与具有相同标题的其他问题重复 但实际上并非如此 我们的业务逻辑主要作为 DB2 存储过程来实现 我看到 H2 有一个 DB2 兼容模式 很好 我们如何使用 H2 通过这些程序进行内存单元测试 不幸的是 H2 似乎缺少 CREATE P
  • 一个表列可用于多个 fk 表?

    对于这种情况 最好的解决方案 做法是什么 我有一个表 可以引用多个表 对象 以下是 UserCalendar 表的示例 这是一个用户保存事件的表 但系统也从后面插入到该表中 用户执行一些有截止日期的服务 这些服务也被插入到该表中 问题是没有
  • 数据访问层设计模式

    我必须使用 NET 设计一个数据访问层 它可能会使用多个具有相同关系设计的数据库管理系统 Mysql 和 Sql Server 基本上 从一个数据库切换到另一个数据库必须很简单 因此我希望您向我推荐一些对您有用的网站或书籍 其中包含实现这种
  • 字符串前后的通配符 - MySql、PSQL

    我需要执行Contains列中的操作 对于包含操作 我们需要在单词前后使用通配符 例如 个性化 查询 gt like sonal 因为这种类型的查询不能使用索引 有什么办法可以提高搜索速度 注意 我使用MySql InnoDB 和PSQL
  • 每个表都应该有主键吗?

    我正在创建一个数据库表 但没有为其分配逻辑主键 每个表都应该有主键吗 简短回答 yes 长答案 你需要你的桌子可以加入一些东西 如果您希望表聚集 则需要某种主键 如果您的表设计不需要主键 请重新考虑您的设计 很可能您遗漏了某些内容 为什么要
  • 使用 NoSQL 文档存储数据库有哪些实际用例?

    在过去的几天里 我一直在阅读文档并观看特定于 Mongo DB 的截屏视频 我不知道像这样的解决方案何时会比典型的 pg 或 mysql 环境更好 具体来说 我的问题是在什么情况下 有用例就很好 你会选择 nosql 路线 Thanks 许
  • 在 SQL 数据库中,一对一关系何时应位于同一个表中,何时应位于不同的表中?

    任何人都可以提供一些示例 说明在 SQL 数据库中什么时候在同一个表上保留一对一关系是更好的选择 而什么时候将它们放在单独的表上更有意义 当您有多个实体 它们都必须能够充当另一个实体的外键 并且 几个实体 既有公共属性又有唯一属性 并且您希
  • 谁能用适当的例子向我解释 1NF、2NF、3NF、BCNF 规则?

    这是一个常见的面试问题 我遇到过一次面试 面试官给了我一张桌子 让我告诉他这张桌子是哪种范式 如果它在 NF中 那么将其归一化到下一个NF 我总是对这些正常形式的数据库感到困惑 谁能向我解释这些范式 并举出每个 NF 如何建模到表中的正确示
  • 将到期日期作为 TIMESTAMP 列的默认值

    有没有办法将列的默认值设置为过期日期 从CURRENT TIMESTAMP 我已经尝试过 ALTER TABLE table ADD COLUMN expire TIMESTAMP NOT NULL DEFAULT TIMESTAMPADD
  • 数据库查询的内部实现

    根据我的经验 我使用过很多查询 例如select order by wheremysql sql server oracle 等中的子句等 有那么一刻我想 1 内部是如何编写来实现上述查询的 2 他们使用哪种语言 3 那是编程语言吗 如果是
  • 翻译数据库内文本的最佳方法是什么

    我们这里有问题 我们需要将网站翻译成多种语言 我们已经使用 gettext 来翻译静态内容 但我们必须将一些文本内容翻译成多种语言 ui不是问题 我们找到了两种翻译文本的方法 1 在我们的文本输入中使用 JSON 为什么这个解决方案不好 每
  • 将我的数据库类与项目中的其他类一起使用

    我有一个自己编写的自定义数据库类 还有一个用户类和一个站点类 MySQL 类有这样的方法 connect query clean fetch 用户等级 register login logout resetPass 站点类别 updateT
  • MySQL ORDER BY rand(),名称 ASC

    我想获取一个包含 1000 个用户的数据库并随机选择 20 个用户 ORDER BY rand LIMIT 20 然后按名称对结果集进行排序 我想出了以下查询not像我希望的那样工作 SELECT FROM users WHERE 1 OR
  • MongoDB - WiredTiger 快照与锁定

    我不完全理解这两个功能在 WiredTiger MongoDB 程序中如何相互关联 1 WiredTiger 快照 2 数据锁定 如果使用WiredTiger引擎的每个读操作在读时都提供了数据库级别的 快照 以便创建一致性 ACID中的C
  • 在 DB2 中使用什么来表示 CURRENT_TIMESTAMP?

    我正在将一些 MySQL 语句转换为 DB2 数据库 但我在以下查询中遇到了问题 CREATE TABLE RFX EVENT MAPPING EVENT TYPE varchar 4 NOT NULL EVENT DESC varchar
  • Capybara+Selenium:如何在集成测试代码中初始化数据库并使其在 Rails 应用程序中可见?

    配置 使用 RSpec Capybara Selemium 驱动程序 SQLite 数据库对 Rails 项目进行集成测试 情况 我与 Capybara 和默认的rack test 驱动程序进行了一些集成测试 他们直接在数据库中创建用户注册
  • Oracle 10 中的本地临时表(适用于存储过程的范围)

    我是甲骨文新手 我需要在存储过程中处理大量数据 我正在考虑使用临时表 我正在使用连接池 并且该应用程序是多线程的 有没有一种方法可以为每次调用存储过程创建不同的表实例来创建临时表 以便来自多个存储过程调用的数据不会混淆 你说你是 Oracl
  • GQL中有OR运算符吗?

    我不知道这里是否有人问过这个问题 我看到了几个关于 like 运算符的问题 但我不确定这是否是我正在寻找的 抱歉我在这方面是菜鸟 但我正在从 MySQL 迁移到 Google App Engine 并且想知道 GQL 中是否有类似于 MyS
  • 数据库中的 GUID 类型

    GUID不是数据库中的正式数据类型 在我们现有的 SQL Server 设计中 Uniqueidentifier类型用于GUID价值 现在我们正在切换到Sybase数据库 我们应该使用varchar 36 来代替那个Uniqueidenti

随机推荐

  • win10下cmder加wsl的多终端配置使用

    win10下cmder加wsl的多终端配置使用 版本说明 版本 作者 日期 备注 0 1 ZY 2020 1 21 初稿 文章目录 win10下cmder加wsl的多终端配置使用 版本说明 一 初衷 二 cmder和wsl 1 cmder
  • Matlab 自相关检测 :自相关函数xcorr

    原文 http blog chinaunix net uid 26275986 id 4342906 html 最近因为工作的关系需要使用matlab作为数据统计的工具 其中一个关键是使用其自相关函数获得数据的估计 自己只在本科时候马马虎虎
  • 易优cms 模板制作教程

    易优cms静态页面编写需要导航条 新闻列表等页面内容信息 在制作模板的时候就用标签来代替 模板标签就是后台设置的数据 所以模板标签你必须得熟悉 你可以看看模板标签大全有哪些标签可以使用 也务必要完全理解本文内容 否则你将不知道怎么使用模板标
  • 免费截图标注贴图工具:Snipaste

    每一次看课 都很羡慕老师能把截图贴在屏幕上 然后能在贴图上写写画画 还不影响你执行其他的电脑操作 超级赞 最最重要的是 贴图功能很适合程序员进行代码比对 效果图比对等 官网下载 Snipaste 解压缩到同名文件夹即可 双击exe文件运行
  • C++ - if 、else、else_if 语句

    C 中的 if else if else 是非常基础的东西 这里需要知道一个东西 大括号 一定要是成对出现 格式为 if 判断语句 如果判断语句成立 运行 如果判断语句不成立 跳过 if 语句 else 如果判断语句不成立 运行 如果判断语
  • 渗透测试-SQL注入之宽字节注入

    SQL注入之宽字节注入 文章目录 SQL注入之宽字节注入 前言 一 什么是宽字节注入 二 宽字节注入获取数据库信息 1 宽字节注入方法 2 宽字节注入防御方法 总结 前言 一 什么是宽字节注入 宽字节是相对于ascII这样单字节而言的 像
  • 信息管理毕业设计 SSM的小区车位出租管理系统(源码+论文)

    文章目录 1 前言 2 实现效果 3 设计方案 4 最后 1 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的java web缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的java web管理系
  • python中pandas库查看数据分布的基本用法

    1 最大值 最小值 平均值 如何在Python中查看pandas dataframe对象列的最大值 最小值 平均值 标准差 中值等 PandasDataFrame 中位数 Python统计大文本行数
  • 设置VLC播放器进行RTSP推流视频

    设置VLC播放器进行RTSP推流视频 一 推流与拉流概念 二 设置推流端 三 设置拉流端 播放端 VLC官网 https www videolan org 一 推流与拉流概念 首先 做几个名词解释 推流 指的是把采集阶段封包好的内容传输到服
  • Easyexcel 3.1.1版本动态表头样式

    需求 动态生成的表头 key value的形式 List
  • Qt中的表格控件QTableWidget是一个非常常用的UI组件

    Qt中的表格控件QTableWidget是一个非常常用的UI组件 它可以用于展示表格数据 并且还有一些便捷的API以及信号槽机制 非常适合初学者入手 本篇文章将会对QTableWidget的使用进行详细介绍 一 如何创建QTableWidg
  • QT 在Window下驱动HID设备

    QT使用HID设备 QT 在Window下驱动HID设备 准备源码 1 下载HID源码 2 解压 拷贝解压目录下的 3 拷贝解压目录下的 4 打开QT建立新工程 把刚准备的window目录的三个文件 5 在QT 配置 pro文件中的SOUR
  • (四)调整PID控制器参数的指南

    一 控制系统设计快速入门和环境 首先确定一下控制任务 快速 精准地控制 必要的稳定性 时域 上升时间 超调等 频域 带宽 阻尼比 然后明白控制系统特点 类积分器 开环稳定性 高度非线性 非最小相位 1 选择一个控制框架 比如说PID 当然也
  • Windows Server2012常见版本

    目录 常见版本 授权方式 常用功能模块介绍 Windows Server 2012这是Windows 8的服务器版本 并且是Windows Server 2008 R2的继任者 该操作系统已经在2012年8月1日完成编译RTM版 并且在20
  • IntelliJ IDEA:新建文件无法识别类型

    参考 https blog csdn net iningwei article details 106115169 总结 File gt Settings gt Editor gt File Types 右侧 Text 然后下面的窗口往下滑
  • C将两个有序的数组合并成一个有序数组

    编写程序 分别输入两个按从小到大排序的数组 a 和 b 将这两个有序数组合并 使合并后的数组仍是从小到大有序的 合并两个有序数组的方法 有两个有序数组a和b 其中数组a的末尾有足够的空间容纳数组b 将数组b容纳到数组a中 创建一个新数组c
  • MyBatis 多表联合查询及优化

    关于优化 对于优化嘛 我这里简单的提几点 大家可以考虑一下 首先 就是对表的设计 在设计表初期 不仅仅要考虑到数据库的规范性 还好考虑到所谓的业务 以及对性能的影响 比如 如果从规范性角度考虑的话 可能就会分多个表 但是如果从性能角度来考虑
  • 如何实现精致扫雷游戏(可扩散可标记)---保姆级教程

    目录 思路 main函数内容 创建 双子 数组 初始化数组 打印棋盘 布置雷 排查雷 初阶 大致过程 如何统计周围雷的个数 判断是否赢得游戏 进阶 可扩散可标记 1 排雷 2 标记 标记要更改的时show数组 呈现给玩家标记信息 3 取消标
  • Bugku-兔年大吉2

    兔年大吉2
  • 逆向基础:32位软件逆向技术

    在编写win32应用程序时 都必须在源码里实现一个WinMain函数 但windows程序的执行并不是从WinMain函数开始的 首先被执行的是启动函数的相关代码 这段代码是由编译器生成的 启动源代码 crt src wincmdln c中