word size vom Intel Atom N450?



  • Ich habe in letzer Zeit angefangen meinen C Code zu disassembeln um ein besseres Verständnis für die Funktionsweisen zu bekommen und da bin ihc bei meinem kleinen Notebook auf einen Effekt gestoßen den ich mir nicht erklären kann:

    Mein Ziel war es die "word-size" raus zu finden und dafür habe ich mir ein Programm geschrieben das im Grunde nur eine function aufruft die einen char array beinhaltet. Ich wollte gucken ab welcher größe die Zeile "subl $16, %esp" immer umspringt.
    Was mich zu aller erst verwundert hat war, dass direkt mit der Größe 16 angefangen wurde, was ja implizit heißen müsste das eine wordsize 16byte wär?
    Der Effekt der mich wirklich verwirrte wae,dass wenn ich jetzt einen char[8] array einbinde brauche ich 24byte (???wieso nur ein Sprung um 8???), und wenn ich ein char[13] einbinde dann brauche ich ganze 40 (???jezz werden doch wieder 16 addiert?) und auch wenn man sich die Abstände betrachtet 1 bis 7 ist 16byte und 8 bis 12 ist 24byte da sind dann auch die Anzahl der Variablen bis zum nächsten Sprung nicht gleich.
    Der nächste Sprung wär dann wieder bei einem char[29]. Also nun einem Abstand von 16?

    Irre ich mich oder verfolgt mein Stack da eine sehr verwirrende logik? Was ist denn dann jetzt nun die word size, und wie kann ich das "nachweisen" herrausfinden?

    danke 🙂



  • Was fuer eine Wortlaenge meinst du denn jetzt genau? Bei x86-Prozessoren ist das nicht immer so einfach, vor allem da intern oft nochmal was ganz anderes ablaeuft, als das Programmierinterface dir glauben machen will...

    Klassischerweise ist bei allen x86-CPU (auch sonst unterscheidet man allgemein idR. zwischen einzelnen "Modell-Unterklassen" wie "Atom-xyz" beim Programmieren von PC-CPU uebrigens nicht) ein Wort = 16Bit. Das entspricht je nach Modus aber natuerlich nicht der "Standardgroesse" von Daten - die kann 16, 32 oder 64Bit betragen.

    AFAIK ist eine Gebraeuchliche Methode in C die "Wortlaenge", bzw. allgemeine Registergroesse zu bestimmen sizeof(int).

    Was dein Compiler dort fuer lustige Spielchen mit dem Stack treibt, hat also sehr wahrscheinlich nur am Rande mit der "Wortlaenge" zu tun. Evtl. kann das jemand ergruenden, wenn du den Code postest und wie du ihn genau compiliert hast (verwendeter Compiler-(Version) und Optionen).



  • Nobuo T schrieb:

    Was dein Compiler dort fuer lustige Spielchen mit dem Stack treibt, hat also sehr wahrscheinlich nur am Rande mit der "Wortlaenge" zu tun. Evtl. kann das jemand ergruenden, wenn du den Code postest und wie du ihn genau compiliert hast (verwendeter Compiler-(Version) und Optionen).

    ja genau, und dann schmeiss dein Proggi auch in einen Debugger, und mach ein paar stackdumps mit Adressenanzeige und schreib selbst mal ein paar unterschiedliche Werte/Registerlängen auf den Stack usw.


Anmelden zum Antworten