zoukankan      html  css  js  c++  java
  • 生成asm-offset

    因为不善于在Makefile中调用shell的相关工具,所以关于asm-offsets.h中的产生的16进制数并不知如何做到。

    因此自己写了个脚本,可以生成同样的文件(再次造了轮子)。

    参考:https://lkml.org/lkml/2001/10/6/3

    #脚本offset.awk
    1
    /^->$/{printf(" ");next} 2 /^->.*/{sym = $1; val = $2; $1 = ""; $2 = ""; sub(/^->/,"",sym);sub(/^$/,"", val);printf("#define %-15s %3d /* 0x%x %s */ ", sym, val, val, $0)}
    //测试文件asm-offset.c
    #include <stddef.h>
    
    #ifndef offsetof                                                                                                   
    #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
    #endif
    
    #define DEFINE(sym, val) 
        asm volatile("
    ->" #sym " %0 " #val : : "i" (val))
    
    #define BLANK() asm volatile("
    ->" : : )
    
    struct university
    {
        int soochow;
        int seu;
        int tsing;
        int peking; 
        int nju;
        int sjtu;
    };
    
    int main(void)
    {
        BLANK();
        DEFINE(SOOCHOW, offsetof(struct university, soochow));
        BLANK();
        DEFINE(SEU,     offsetof(struct university, seu));
        BLANK();
        DEFINE(TSING,   offsetof(struct university, tsing));
        BLANK();
        DEFINE(PEKING,  offsetof(struct university, peking));
        BLANK();
        DEFINE(NJU,     offsetof(struct university, nju));
        BLANK();
        DEFINE(SJTU,    offsetof(struct university, sjtu)); 
        BLANK();
    }

    使用:

    1 gcc -S asm-offset.c; awk -f offset.awk asm-offset.s > asm-offset.h; rm asm-offset.s

    输出:

    //asm-offset.h                                                                                                                   
    
    #define SOOCHOW            0    /* 0x0    offsetof(struct university, soochow) */
    
    #define SEU                4    /* 0x4    offsetof(struct university, seu) */
    
    #define TSING              8    /* 0x8    offsetof(struct university, tsing) */
    
    #define PEKING            12    /* 0xc    offsetof(struct university, peking) */
    
    #define NJU               16    /* 0x10   offsetof(struct university, nju) */
    
    #define SJTU              20    /* 0x14   offsetof(struct university, sjtu) */
  • 相关阅读:
    Mvc+三层(批量添加、删除、修改)
    js中判断复选款是否选中
    EF的优缺点
    Git tricks: Unstaging files
    Using Git Submodules
    English Learning
    wix xslt for adding node
    The breakpoint will not currently be hit. No symbols have been loaded for this document."
    Use XSLT in wix
    mfc110ud.dll not found
  • 原文地址:https://www.cnblogs.com/openix/p/3335076.html
Copyright © 2011-2022 走看看