zoukankan      html  css  js  c++  java
  • NASM中的ALIGN ALIGNB SECTALIGN

    ALIGN与ALIGNB

    NASM中的ALIGN与ALIGNB是用来字节对齐的,它们接收2个参数,第一个参数是必须的,表示对齐的字节数(必须是2的幂),第二个参数是可选的,表示为了对齐而进行填充的内容,如果不提供,默认用NOP填充(等价于RESB 1)。

    align   4               ; align on 4-byte boundary        
    align   16              ; align on 16-byte boundary        
    align   8,db 0          ; pad with 0s rather than NOPs         
    align   4,resb 1        ; align to 4 in the BSS         
    alignb  4               ; equivalent to previous line

    ALIGN和ALIGNB可以在struct中使用:

    struc mytype2   
        mt_byte:        
           resb 1        
           alignb 2   
        mt_word:         
            resw 1         
            alignb 4  
        mt_long:         
            resd 1  
        mt_str:         
           resb 32 
    endstruc    

    需要注意的是,ALIGN和ALIGNB对齐的起始点是相对于当前SECTION的,而不是整个可执行文件的地址空间。

    SECTALIGN

    SECTALIGN是用来对SECTION进行字节对齐的。

    在进行SECTION定义的时候,可以使用align=属性来进行字节对齐,而SECTALIGN macro不同,它可以在任何时候进行字节的对齐。

    一旦使用了SECTALGIN,对齐字节数只能增加,不能减少。比如SECTALIGN 16之后,就无法SECTALIGN 8。

    ALGIN和ALIGNB底层默认都是调用的SECTALIGN,如果想关闭这个默认实现,可以调用SECTALIGN OFF,如果想打开调用SECTALIGN ON。调用SECTALIGN ON/OFF只是关闭ALIGN和ALIGNB的默认实现,不影响SECTALIGN的使用。

  • 相关阅读:
    IP地址加时间戳加3位随机数
    你会想造一艘船吗?
    提问的智慧
    建造者模式
    设计模式(一)
    jeesite中activiti中的流程表梳理
    如何读书、学习?
    zxing生成高容错率二维码,以及添加文字
    LVM磁盘划分
    阿里云盘扩容(SUSE Linux下)
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/14621884.html
Copyright © 2011-2022 走看看