首页 > 编程语言 >汇编-addr获取变量地址

汇编-addr获取变量地址

时间:2023-12-02 09:14:55浏览次数:28  
标签:汇编 addr 局部变量 mov eax 地址 ebp

 

对于全局变量

它的地址在编译的时候已经由编译器确定了,它的用法大家都不陌生:

mov 寄存器, offset 全局变量名

 

addr获取局部变量

对于局部变量,它是用ebp来做指针操作的

局部变量1的地址是ebp-4局部变量2的地址是ebp-8......

由于ebp的值随着程序的执行环境不同可能是不同的, 所以局部变量的地址值在编译的时候也是不确定的, 不可能用offset伪操作符来获取它的地址。

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data   
 
    
 
.code  
 
TestProc Proc dwParam1:DWORD,bwParam1:DWORD
        local loc1:dword ,loc2:dword   ;用local语句定义了2个局部变量:loc1和loc2
                
        mov ebx, dwParam1   
        mov loc1,ebx       
        mov ecx,bwParam1
        mov loc2,ecx

        lea eax, [ebp-4]   ;把局部变量1的地址给eax
        mov edx,[eax]      ;EDX = 10101010h
        lea eax, [ebp-8]    ;把局部变量2的地址给eax
        mov edx,[eax]      ;EDX = 00202020h

                                        
        ret
TestProc endp
   
 
main PROC   
    
    invoke TestProc,10101010h,202020h
        
 
 
    INVOKE ExitProcess,0  
main ENDP   
END main

 

函数调用时局部变量地址做参数 

如果要在invoke伪指令的参数中用到一个局部变量的地址, 该怎么办呢?参数中是不可能写入lea指令的, 用offset又是不对的。MASM对此有一个专用的伪操作符addr, 其格式为:
addr 局部变量名和全局变量名

当addr后跟全局变量名的时候, 编译器自动按照offset的用法来使用;

当addr后面跟局部变量名的时候, 编译器会自动用lea指令先把地址取到eax中, 然后用eax来代替变量地址使用

要注意的是:对局部变量取地址的时候, addr伪操作符只能用在invoke的参数中,不能用在如下的mov指令中, 这种限制很好理解, 因为这种情况下, lea指令如何能被代到语句里面呢:
mov eax, addr 局部变量名      ;注意:这是错误的用法

addr 引⽤的操作数(局部变量名)必须在使⽤ addr 前就得定义或声明

addr的左边,不能使用eax寄存器做参数

 

 

 

 

 

 

 

 

 

 

标签:汇编,addr,局部变量,mov,eax,地址,ebp
From: https://www.cnblogs.com/liming19680104/p/17871193.html

相关文章

  • 微软Windows硬件最新驱动下载地址,无讨论,版本新,都是硬件厂家上传
    下面地址可以下载Windows硬件最新驱动,这里下载的地址是纯粹的驱动,没有其他累赘。这里的驱动是硬件厂家上传的驱动,我查找的是realtek8852AE的驱动,其他任何地方找到的驱动都没有这里的新。realtek8852AE这款螃蟹无线网卡,联想,红米等很多厂家的笔记本都在用,但器旧版驱动容易出......
  • dremio 提供的 maven repo地址
    参考mavenrepo<repositories><repository><id>dremio-public</id><url>http://maven.dremio.com/public/</url></repository><repository><id>dremio-free&......
  • 网络 主机名 地址 解析
    针对问题,查找整理记录情景电脑没加入域电脑在域网络中电脑使用SMB协议访问域网络中加入域的其他电脑电脑使用HTTP协议访问域网络中需账号登录的网站主机名(Hostname)到IP地址的解析方式:本地DNS解析向其他计算机广播NetBIOS请求(NetworkBasicInput/OutputSystem)解析。......
  • 汇编-Lea将内存地址加载到寄存器
     它的功能主要是将一个有效地址加载到寄存器中,让程序通过寄存器来访问相应的内存地址 lea指令的应用场景在汇编语言中,lea指令应用广泛,它通常用来完成以下几个任务:1.计算地址偏移量:当程序需要访问数组、结构体等数据结构中的某个元素时,我们可以使用lea指令来计算该元素相对......
  • SQL server之IP地址计算
    DECLARE@ipASVARCHAR(15)='1.0.0.0'--将IP地址转换为整数DECLARE@ipIntASINT=(CAST(PARSENAME(@ip,4)ASINT)*POWER(256,3))+(CAST(PARSENAME(@ip,3)ASINT)*POWER(256,2))+(CAST(PARSENAME(@ip,2)ASINT)*POWER(256,1))+CAS......
  • 绕过cdn查询真实ip地址(概率性,不一定成功)
    背景通常网站站点加了cdn以后,一般无法解析到真实的ip地址,这时候想通过ip加端口的方式获取数据就不太可能,但是如果ngix代理禁止了ip访问,获取到真实ip也没用,会显示nginxforbidden,但是别的协议应该还是可以走,只是http的协议走不了如何查看网站是否加了cdn目标:http://alist.xiaoya......
  • 汇编-数据结构
      .386.modelflat,stdcalloptioncasemap:none.stack4096includewindows.incExitProcessPROTO,dwExitCode:DWORDSTUDENTstruct;自定义数据结构nameDWORD?IDDWORD?STUDENTends.datastwndclassWNDCLASS<>;末初始化st......
  • 阿里巴巴普惠体 2.0; 阿里巴巴普惠体 3.0 Alibaba-PuHuiTi-B 下载地址
    阿里巴巴普惠体3.0阿里巴巴普惠体是一套全球永久免费正版商用的字体家族。阿里巴巴普惠体3.0为一套符合新国家标准GB18030-2022的简体中文字符集,包含GB18030-2022强制规范三个实现级别:实现级别1+实现级别2标准规格的7字重、实现级别3标准规格的Regular单一字重。7字重共194,460个全......
  • git改变仓库地址
    在管理项目的时候,可能会遇到改变项目仓库地址的情况为了尽可能的模拟实际开发情况以github和gitee作为远程仓库前提:同时为github和gitee配置公钥,并访问正常为什么要进行地址替换,而不是直接下载新的项目,当改变项目仓库的时候,其实代码的没有太多的变动,新项目所要的相关配置,才是......
  • 汇编指令长度计算
    汇编指令长度计算1、无操作数指令没有操作数的指令,指令长度为1字节。如es:ds:cbwxlat2、操作数只涉及寄存器操作数只涉及寄存器的指令,指令长度为2字节。如moval,[si]movax,[bx+si]movds,ax3、操作数涉及内存地址的指令操作数涉及内存......