ASM: offset into struct

Sekcia: Programovanie 21.03.2012 | 13:49
Avatar Grawp   Používateľ
Existuje nejaké makro pre GNU assembler, ktoré dokáže spočítať offset na vybranú položku vnútri C štruktúry?

Napr. mám struct X {
unsigned int a;
long, b;
short c;
} x,y,z;

Potrebujem v asm napísať niečo typu
long *pointer = &y.b;
a na to potrebujem automaticky počítať offset.
    • Re: ASM: offset into struct 22.03.2012 | 20:32
      Avatar Grawp   Používateľ
      Ako zvyčajne si po čase odpoviem sám: Existuje direktíva .cdecls, ktorá umožnuje inclusion of C/C++ header files to assembly files. Z týchto headerov sú potom v assembly file vytvorené definície typov, deklarácie funkcií, atď, na ktoré sa dá odkazovať. Mená jednotlivých položiek štruktúr sa potom .equ ich offsetom.
      • Re: ASM: offset into struct 23.03.2012 | 12:57
        Avatar bedňa antiX, Devuan, LegacyIce  Administrátor
        Ako zvyčajne si po čase odpoviem sám
        Tak to sa ti pri ASM bude stávať dosť často :)
        Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
      • Re: ASM: offset into struct 01.04.2012 | 16:35
        Avatar Grawp   Používateľ
        Tak to čo som uviedol bolo pre nejaký iný kompilátor (tj. nie GCC ani Clang).

        Správna odpoveď sa nachádza v linux/arch/<arch>/asm/asm-offsets.c a linux/Kbuild. Offsety sú generované z "falošných inštrukcií" v C súbore, ktorý sa prekladá do asm, kde dojde k rozvitiu C makier a iných vecí ale nedojde k prekladu samotných inštrukcíi. Tento S súbor je následne parsovaný sed-om a hladajú sa rozvité hodnoty, ktoré sa dosadia do výsledného asm-offsets.h.