文档章节

学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 537
阅读 9
收藏 0
点赞 0
评论 0

PTR: 指定要操作的数据尺寸
; Test12_1.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    val db 11h, 22h, 33h, 44h, 55h, 66h, 77h, 88h

.code
main proc
    xor eax, eax             ;清空 EAX, 同 mov eax, 0
    mov eax, dword ptr val   ;
    PrintHex eax             ;44332211
    
    xor eax, eax             ;
    mov eax, dword ptr val+1 ;
    PrintHex eax             ;55443322
    
    xor eax, eax             ;
    mov ax, word ptr val     ;
    PrintHex eax             ;00002211
    
    xor eax, eax             ;
    mov al, byte ptr val     ;
    PrintHex eax             ;00000011
    ret
main endp
end main

 
 
 
 
 

 

 

  

OFFSET: 获取全局变量或标号的偏移地址
; Test12_2.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    v1 db 'abcdefg', 0
    v2 dd 11223344h

.code
main proc
    PrintHex offset v1    ;00403000
    PrintHex offset v2    ;00403008
    PrintHex offset main  ;00401000 - 这里的 main 是个标号
    ret
;本例中的 offset 不能用 addr 代替
main endp
end main

 
 
 
 
 

 

 

  

ADDR: 类似 offset 也是获取变量的地址...
; Test12_3.asm
.386
.model flat, stdcall

;include    windows.inc
include    kernel32.inc
includelib kernel32.lib
include    user32.inc
includelib user32.lib

.data
    v1 dd 00434241h ;ABC
    v2 dd 00636261h ;abc

.code
main proc
    invoke MessageBox, 0, offset v1, offset v2, 0 ;现在 v1、v2 是全局变量
    invoke MessageBox, 0,   addr v2,   addr v1, 0 ;使用 offset 和 addr 均可
    invoke ExitProcess, 0
main endp
end main

 
 
 
 
 

 

 

  

获取局部变量的地址只能使用 ADDR:
; Test12_4.asm
.386
.model flat, stdcall

;include    windows.inc
include    kernel32.inc
includelib kernel32.lib
include    user32.inc
includelib user32.lib

.code
main proc
    LOCAL v1,v2
    mov v1, 00434241h
    mov v2, 00636261h
    ;invoke MessageBox, 0, offset v1, offset v2, 0  ;offset 不能获取局部变量的地址
    invoke MessageBox, 0,   addr v2,   addr v1, 0
    invoke ExitProcess, 0
main endp
end main

 
 
 
 
 

 

 

  

OFFSET 和 ADDR 的异同:
1、offset 不能获取局部变量的地址;
2、addr 只能用于调用函数(invoke)时, 不能用于赋值操作;
3、addr 面对局部变量时会转换为 lea 等指令, addr 面对全局变量时则直接调用 offset;
4、在 invoke 中应尽量使用 addr, 其他只用 offset.

THIS:
; Test12_5.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    TextAddr equ this byte   ;伪指令 this 可让当前变量和下一个变量同址 
    szText db 'Asm', 0
.code
main proc
    PrintHex offset szText   ;00403000
    PrintHex offset TextAddr ;00403000
    
    PrintString szText       ;Asm
    mov [TextAddr], 'a'      ;给 TextAddr 赋值
    PrintString szText       ;asm
    ret
main endp
end main

 
 
 
 
 

 

 

  

© 著作权归作者所有

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
献给汇编初学者-函数调用堆栈变化分析

标 题: 献给汇编初学者-函数调用堆栈变化分析 作 者: 堕落天才 时 间: 2007-01-19,19:20:09 链 接: http://bbs.pediy.com/showthread.php?t=38234 跟一个朋友谈堆栈的时候 就写下了这段文字...

失足处男的倒霉孩子 ⋅ 2014/09/04 ⋅ 2

一步一步学ROP之linux_x64篇

一步一步学ROP之linux_x64篇 一、序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代...

阿里聚安全 ⋅ 2016/11/07 ⋅ 0

借助编译器阅读耗子叔6个变态的C语言Hello World程序

hello1.c 这段代码初步一看,有点晕,但是如果耐心下来仔细读读,从一个安全从业者的角度来说,其实就是最为初级的加密,定义了一堆宏进行替换,很容易就可以把代码还原解读了,但是有一种更...

firebroo ⋅ 2016/07/12 ⋅ 3

你想错了,并不是所有指针都是4字节。

以前自己也一直认为, 指针都一样,32机器的寻址是32位,大小都是4,原来,我一直是错的,成员函数指针的大小就不是4,不过,它应该不是普通的函数指针,看来自己以前对成员函数指针的理解太...

长平狐 ⋅ 2012/10/08 ⋅ 0

Java里的CompareAndSet(CAS)

Atomic 从JDK5开始, java.util.concurrent包里提供了很多面向并发编程的类. 使用这些类在多核CPU的机器上会有比较好的性能. 主要原因是这些类里面大多使用(失败-重试方式的)乐观锁而不是syn...

vshcxl ⋅ 2016/12/25 ⋅ 0

纯 C# 实现 Hook 功能

原文出处:zhao.yj 发布一个自己写的用于Hook .Net方法的类库,代码量不大,完全的C#代码实现,是一个比较有趣的功能,分享出来希望能和大家共同探讨 安装:Install-Package DotNetDetour 源...

zhao.yj ⋅ 2016/06/03 ⋅ 0

反汇编IDA WinDbg

libdisasm http://bastard.sourceforge.net/libdisasm.html http://code.google.com/p/libdasm/ 利用IDA Pro反汇编程序 IDA Pro是一款强大的反汇编软件,特有的IDA视图和交叉引用,可以方便理...

AlphaJay ⋅ 2012/06/10 ⋅ 0

win32汇编和x64汇编?

win32汇编升到winx64汇编,转型容易吗?我指的是会win32汇编,还学x64汇编吗?我是初学,能不能直接学x64汇编语言,请推荐本书?

IIOWE ⋅ 2014/10/01 ⋅ 3

为什么破解要学win32汇编?

听说破解要学win32汇编,写壳也要用win32汇编?为什么呢?不学不能学破解吗?

IIOWE ⋅ 2014/10/02 ⋅ 13

代码段和堆栈

代码段: 在采用段式内存管理的架构中,代码段(code segment / text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于...

壶漏子 ⋅ 2016/12/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部