FromNandの日記

自分的備忘録

2019-12-04から1日間の記事一覧

【x86アセンブラ】レジスタの内容を表示するプログラムを考えてみる

低レイヤの作業をしているとこういった関数が欲しくなる時があるので実装してみた。 まず、これがC言語側から呼び出す際に必要とする構造体と使用する関数のプロトタイプ宣言。 // search_regs.h #ifndef _SEARCH_REGS_H #define _SEARCH_REGS_H typedef str…

【x86アセンブラ】PUSHAL・POPALについて調べてみた【順番・レジスタの種類など】

この記事は32bitレジスタを対象に考えておりますのでご了承ください。 参考 : PUSHAD - Push All General-Purpose Registers x86には一括してレジスタを操作する命令PUSHAL・POPALがあるらしい。 それぞれが行う命令を分解して考えると、こうだ。 PUSHAL (PU…

【C言語マクロ】どのファイルの何行目から呼ばれているかを調べる方法

なんだか今は規格で廃止されているかもしれないけど、どのファイルのどの行から呼ばれたかを調べてくれるマクロが紹介されている。コンパイラが色々情報を補って実現されているものらしい。すごい。参考 : Finding out where a function was called from - E…

多次元配列の各点におけるアドレスを表示する

おそらく理解はできているのだが、実際に表示させてみる。 #include<stdio.h> int main(void){ int i; char array[10][10][10][10]; // arrayは「int(*)[10][10][10]」、&arrayは「int(*)[10][10][10][10]」、&array[0]はarrayと同様「int(*)[10][10][10]」を指してい</stdio.h>…

【Eli Bendersky】アセンブラレベルの面白い記事リンク

EliさんのサイトはArchives - Eli Bendersky's website。 32bitコンピュータで64bit命令をどのように実行しているか? 64-bit types and arithmetic on 32-bit CPUs - Eli Bendersky's website x86におけるスタックについて Where the top of the stack is o…

【C言語・アセンブリ】多次元配列のアクセスをアセンブラで見てみる

次のプログラムをアセンブルするといい。配列の各次元の要素数を変えてみると、プログラムが興味深く変化する。 #include<stdio.h> int main(void){ int i = 1, j = 2, k = 3; char a[10], b[10][10], c[10][10][10]; a[i] = 0xff; b[i][j] = 0xff; c[i][j][k] = 0xff</stdio.h>…