用VC写Assembly代码(3)

ebp 函数堆栈esp_函数参数压栈,栈帧ebp,esp怎样移动的? 压栈一次esp-4,ebp不变esp是栈顶指针寄存器,堆栈操作只和esp有关比如有一个函数a,有两个参数,一般是这样的PUSH 1 参数2压栈,esp-4PUSH 2 参数1压栈,esp-4CALL a 调用a:PUSH EBP 保存ebpMOV EBP,ESP 改变栈帧,以后访问参数通过ebp,访问局部变量通过espSUB ESP,8 分配局部变量空间...ADD ESP,8POP EBP 恢复... 阅读详情

不知为什么,对这种编程方法越来越大越有兴趣.先写个使用参数的例子(十分简单,适用于任何懂C的人)给各位参考一下吧:

#include <stdio.h>

int asm(int s)
{
 int t=0;
 __asm
 {
  mov eax, DWORD PTR [ebp+8] ;把s的值传给eax
  mov t, eax     ;把eax的值传给t
 }
 printf("- %d -", t);//把T显示出来
}
void main()
{
 asm(100);
}

我调试这个程序,得出以下汇编代码:
3:    int asm(int s)
4:    {
0040B4B0   push        ebp
0040B4B1   mov         ebp,esp
0040B4B3   sub         esp,44h
0040B4B6   push        ebx
0040B4B7   push        esi
0040B4B8   push        edi
0040B4B9   lea         edi,[ebp-44h]
0040B4BC   mov         ecx,11h
0040B4C1   mov         eax,0CCCCCCCCh
0040B4C6   rep stos    dword ptr [edi]
5:        int t=0;
0040B4C8   mov         dword ptr [ebp-4],0
6:        __asm
7:        {
8:            mov eax, DWORD PTR [ebp+8]  ;把s的值传给eax
0040B4CF   mov         eax,dword ptr [ebp+8]
9:            mov t, eax                  ;把eax的值传给t
0040B4D2   mov         dword ptr [ebp-4],eax
10:       }
11:       printf("- %d -", t);//把T显示出来
0040B4D5   mov         eax,dword ptr [ebp-4]
0040B4D8   push        eax
0040B4D9   push        offset string "%d====" (0041ff3c)
0040B4DE   call        printf (0040b790)
0040B4E3   add         esp,8
12:   }
0040B4E6   pop         edi
0040B4E7   pop         esi
0040B4E8   pop         ebx
0040B4E9   add         esp,44h
0040B4EC   cmp         ebp,esp
0040B4EE   call        __chkesp (0040b470)
0040B4F3   mov         esp,ebp
0040B4F5   pop         ebp
0040B4F6   ret

Assembly 立即下载

相关推荐

绿联NAS使用docker部署immich【pro系统】

随后去绿联你想要存放immich的地方创建一个文件夹,便于区分,如图,我创建了一个immich的文件夹。1.进入文件夹后面是有斜杠的(tips:只需要敲击前面几个字母,按tab键自动补全)cd:进入路径,1.可以是当前的下一层相对路径 2.也可以是完整的全路径。前言:好像没有绿联的教程,刚好自己也有需求,就顺便记录了。如果你的挂载实战情况比较复杂,接下来是喂到胃里的知识点。】下载文件(群晖的,别慌,能用),两份,红框的就是。首先,没什么好说的,去immich官网【点击1.终端,2.新增,3.确定。

weixin_45343644的博客 1782

反汇编(一)C/C++变量、常量、指针和引用在内存中的表现形式

高级语言隐藏了太多信息。这一篇用汇编来直观探究 C/C++ 变量,函数,类,继承等等再内存中是怎么表示的 先来看这样一段代码,分为三个部分。先准备好三个部分准备反汇编。 1.defineVar() 函数内解释 变量在内存中的表现形式 2. varPtr() 函数内解释指针与引用在内存中的表现形式 3.constdefine()函数内解释const与define的区别跟在内存中的表现形...

qq_38576022的博客 1294

从理论到代码:如何用随机矩阵理论(RMT)优化你的微生物共现网络分析?

本文详细介绍了如何利用随机矩阵理论(RMT)优化微生物共现网络分析,解决传统阈值法的主观性和不稳定性问题。通过R语言实现端到端的分析流程,包括矩阵标准化、本征值谱分析和自动阈值确定,显著提升网络构建的准确性和可靠性。该方法特别适用于高通量测序数据,能自动识别噪声与真实信号的边界,为微生物组学研究提供更精确的互作网络分析工具。

weixin_29096377的博客 364

使用Assembly来开发c#程序

什么是Assembly(程序集)?Assembly是一个包含来程序的名称,版本号,自我描述,文件关联关系和文件位置等信息的一个集合。在.net框架中通过Assembly类来支持,该类位于System.Reflection下,物理位置位于:mscorlib.dll。Assembly能干什么?我们可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息。一个简单的演示实例:1.建立一个C...

weixin_33695450的博客 760

利用OrthoFinder做泛基因家族聚类分析

这条命令会将 Arabidopsis_thaliana.TAIR10.59_longest_trans.pep.fa 文件中的所有序列ID,去掉ID中的空格后面的部分,只保留 > 后第一个空格之前的基因ID,并将结果保存在 An1.fasta 文件中。muscle 是一种常用的多序列比对工具,用于基因组或蛋白质序列的比对。基因家族(Gene family),是来源于同一个祖先,由一个基因通过基因重复而产生两个或更多的拷贝而构成的一组基因,它们在结构和功能上具有明显的相似性,编码相似的蛋白质产物。

qq_64400864的博客 2756

PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

前言 原理简介 输入参数准备 1 objectPoints特征点世界坐标 2 imagePoints特征点在摄像头下的像素点坐标 3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下的坐标 2求相机在世界坐标中的坐标 3效果求解相机在世界坐标系下的坐标点 4求解代码1.前言  很多时候,当我们利用单目相机获取图像时,往往只能获取图像中

cocoaqin的博客 5万+

[原创]在 Visual C++ 中使用内联汇编

一、 优点    使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。    内联汇编代

Yonsm.NET 2222

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

AI人人懂 949

用VC写Assembly代码(6)--附录3[X86指令使用详解]

MOVMOV dst, src相当于:int dst;dst = src; 

小发猫 2220

快速入门必看!RT-DETR手把手训练自己的数据集去跑实验,基于 ultralytics 仓库源码改进,配置虚拟环境,准备数据集、训练、验证、推理测试 ,实现0到1的完整教学过程。

本文介绍了使用Ultralytics框架训练RT-DETR模型的全流程。首先需要创建Python 3.10虚拟环境,安装指定版本的PyTorch和相关依赖包。然后准备数据集,修改配置文件,并详细介绍训练、验证和推理三个核心步骤的代码实现。训练阶段使用RTDETR类加载模型配置,设置训练参数;验证阶段评估模型性能;推理阶段可对图片、视频等进行预测。文中还提供了清华大学镜像源加速下载,以及详细的参数配置说明,帮助用户快速搭建RT-DETR目标检测模型。

Ai缝合怪、助力小伙伴高效发论文 5565

21、空间数据处理中的克里金方法及应用

本文介绍了空间数据处理中的克里金方法,特别是带外部漂移的克里金法(KED)及其在遥感数据融合和支持变化问题中的应用。讨论了克里金方法的基本原理、优缺点以及在不同空间分辨率遥感图像融合中的具体操作流程。同时,还涉及了地统计数据融合和支持变化问题的解决方案,包括块克里金法、面到点克里金法和多边形克里金法等。

gold的博客 90

用VC写Assembly代码

各位好,最近我在研究SHELLCODE 的编写,因为需要ASM的基础,所以用VC写一些ASM代码.有兴趣的朋友可以一起讨论.我们都欢迎你. 用VC写Assembly代码(1) 用VC写Assembly代码(2) 用VC写Assembly代码(3)  用VC写Assembly代码(4) 用VC写Assembly代码(5) --字符串 用VC写Assem

小发猫 4101

04 Zabbix自定义触发器

1、触发器是什么 触发器表达式:允许定义一个什么状况的数据是“可接受”的阈值。因此,如果接收的数据超过了可接受的状态,则触发器会被触发 , 或将状态更改为异常。 一个触发器可以拥有下面几种状态: 值 描述 OK 这是一个正常的触发器状态。在旧版本的Zabbix中称为FALSE。 PROBLEM 通常意味着发生了某些事情。例如,处理器的负载较高。在旧版本的Zabbix中称为TRUE。 2、创建触发器TRIGGER 案例:系统超过3个用户登录,则告警。 2.1 开启告警声

Jian Sun_的博客 1541

用VC写Assembly代码(1)

VC完全可以支持所有.486指令.我们的方法是使用__asm关键字插入Assembly代码.Assembly可以完成N多C&C++不能完成的任务.这个谁动知道.所以我们到C&C++,再懂一些Assembly,会使我们更强.其实很简单,看看下面代码:#include void main(){ char szbuf[] = "Hello world./n"; __asm {  lea

小发猫 3472

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

用VC写Assembly代码(4)

在汇编中使用printf没什么意义,这里只说明一写问题,printf 再 __asm中的使用有点复杂.先看看下面代码:void main(){ int t = 10; char *szformat = "t = %d/n"; printf(szformat, t);}===输出t = 10Press any key to continue调试得到的汇编代码:19:   void

小发猫 3002

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

用VC写Assembly代码(2)

虽然没人看,但我决定还是写多篇啦.至于Assembly指令的功能,我会在适当的位置说名,如果不懂汇编的朋友,我们也可以通过没个例子和说名,慢慢也了解汇编.来看看这个:#include void loop(){ char szloop[] ="looping/n"; int i=0; __asm {  start:  lea eax, szloop  cmp i, 10  jz ex

小发猫 3001

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

用VC写Assembly代码(7)--在Visual C++中使用内联汇编

 在Visual C++中使用内联汇编    一、 优点    使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期

小发猫 2519

用VC写Assembly代码(5) --字符串

是有几个朋友也喜欢这种编城方法的,前几天听我一个朋友说:"真正的高手是懂C,而不是C++",想想也是.几乎所有代码最后还是有汇编代码组成的,只是效率的问题,汇编和机器语言11对应,这使汇编可以叫机器做机器能做的所有事.所以学好汇编对任何高级语言的理解很有好处.希望编程爱好者也能学习.没事做, 写了短字符串处理的代码:#include #include int main(int ar

小发猫 2961

vc调用c#写的dll

转自:http://www.codeproject.com/csharp/ManagedCOM.asp   Download source - 5.21 Kb Preface COM Interoperability is the

wangsheng8888的专栏 2035

用VC写Assembly代码(5) --函数调用(三)

没什么好说的啦,看代码就是啦#include void main(){ char *a = (char*)MessageBox; __asm {  push 0  push 0  push 0  push 0  mov ebx, 77d5050bh  call ebx } printf("%0x/n", a);} 顺便转一篇有关SHELLCODE的文章,看起来很简单,但是测试就是不成功

小发猫 1979

用VC写Assembly代码(6)--附录2[windows进程中的内存结构]

在阅读本文之前,如果你连堆栈是什么多不知道的话,请先阅读文章后面的基础知识。 接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论。下文中的C语言代码如没有特别声明,默认都使用VC编译的release版。 首先,来了解一下 C 语言的变量是如何在内存分部的。C 语言有全局变量(Global)、本

小发猫 2484

用VC写Assembly代码(5) --函数调用(一)

用C写一个加载msvcrt.dll的方法如下:#include #include void main(){  char *msvcrt = "msvcrt.dll";  HINSTANCE h = LoadLibrary(msvcrt);}反汇编得到的代码是:5:    #include 6:    #include 7:8:    void main()9:    {0040B4B0 55   

小发猫 2680

用VC写Assembly代码(5) --一些宏的使用(二)

目前我知道vc++ inline assembler 有这几个宏 LENGTH、SIZE、TYPE,他们使用简单,下面个个例子:void main(){ int k[10]; int a,b,c; __asm {  mov eax, LENGTH k  mov ebx, SIZE k  mov ecx, TYPE k  mov a, eax  mov b, ebx  mov c, ecx } 

小发猫 2328

An error occurred during the installation of assembly 'Microsoft.VC90.CRT,version = "9.0.21022.8"

问题描述windows安装python2.7的时候出现An error occurred during the installation of assembly ‘Microsoft.VC90.CRT,version = “9.0.30279.1”…………报错信息如图 问题原因vc没有安装问题解决vc可通过去微软光网直接下载安装,也可以用其他工具下载安装例如: 下载完安装完,重新通过pyth

Moolight_shadow的专栏 1万+

An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL'

An error occurred during the installation of assembly 'Microsoft.VC90.ATL or 'Microsoft.VC80.ATL' 下载安装即可修复 https://support.microsoft.com/default.aspx?scid=kb;en-us;946414 转载于:https://www.cnblo...

weixin_30820151的博客 1449
上一篇: 用VC写Assembly代码(2)
下一篇: 用VC写Assembly代码(4)
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值