zoukankan      html  css  js  c++  java
  • 汇编中的ASSUME的使用

    assume 最典型的用法:是指明变量与段寄存器的联系,比如 assume ds:data,它是告诉编译器以后所有在data段中定义的变量寻址时,使用ds作为段地址,但是它不对程序作任何事,比如你必须自己对ds赋值,这也就是为什么dos下典型的汇编段如下:

    .data
      ........
    .code
      ........
      assume cs:code,ds:data
    start: .......
      mov ax,data
      mov ds,ax
      ...
    ends
    end start
    

    它也经常用来将寄存器当作结构体指针来用

    ASSUME edx:ptr STRUCT ;将edx 定义为STRUCT指针变量,把STRUCT结构体的起始地址给edx
    lea edx, STRUCT ;用 [edx].调用STRUCT的字段
    ASSUME edx:nothing ;取消定义 这个时候edx 不是指针,[edx].不能调用字段了
    

    实例: 参见《Windows PE权威指南》

    BookStrore STRUCT
      Name db 8 dup(8);书库的名字
      Address dd ? ;书库所在地址
      Count dd ? ;书库中藏书量
    BookStrore ENDS
    
    name1 db "书库1",0
    lib1 BookStrore <?>
    
    move ebx ,lib1
    assume ebx:ptr BookStrore;
    invoke memcpy,[ebx].Name,add name1 (此处跟书上有略微不同)
    mov eax,12345h
    mov [ebx].Address ,eax;
    mov eax, 2
    mov [ebx].Count, eax
    assume ebx:nothing
    

    assume fs:nothing这句话在WIN32汇编里是啥意思?

    assume fs:nothing
    mov eax,fs[0]
    

    因为MASM编译器默认WINDOWS默认FS指向异常处理代码段,所以在程序中要使用FS寄存器就要用

    assume fs:nothing
    

    来声明,否则就会报错。

  • 相关阅读:
    TensorFlow入门:debug方法
    Firefox 隐藏提示:正在安装组件,以便播放此页面的音频或视频
    CentOS 6.5挂载windows NTFS硬盘
    Linux中执行shell脚本
    CentOS opera 浏览器
    CentOS 更新为网易yum源
    Centos下替换yum源为阿里云源
    CentOS常用基础命令大全
    Linux CentOS删除或重命名文件夹和文件的办法
    给Centos7装上Chromium
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537600.html
Copyright © 2011-2022 走看看