#include<stdio.h> #include<string.h> int main(){ char str[] = "you will make me happy\n"; printf("%s", str); for(int i = 0; i < strlen(str) - 1; i++){ printf("str[%d] : %c : %p\n", i, str[i], &str[i]); } return 0; }
結果を一部載せます。
str[0] : y : 0x7fffffffd530 str[1] : o : 0x7fffffffd531 str[2] : u : 0x7fffffffd532 str[3] : : 0x7fffffffd533 str[4] : w : 0x7fffffffd534 str[5] : i : 0x7fffffffd535 str[6] : l : 0x7fffffffd536
次にgdbでスタック領域を覗いてみます。
(gdb) x/30x $rsp
0x7fffffffd4f0: 0x20756f79 0x6c6c6977 0x6b616d20 0x656d2065
これは・・・最初の 'y' 0x79 が0x7ffffffffd4f3の位置にあるようですが・・・
0x7fffffffd530と0x7ffffffffd4f3とかなり差があります。
おまけに、0x7ffffffffd4f0 の小さいアドレスの方に、スペース 0x20 が入っていますよね??
どういうことでしょうか?gdbの結果がよくわかりません。
これ、gdbは内部のメモリのリトルエンディアンを自動で元に戻して表示しているんでしょうか??
わかる方いますか??
ALSRは無効にしています。
Linux 64bit debain GCC です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/17 11:31
2017/12/17 11:35
2017/12/17 12:45
2017/12/17 12:47
2017/12/17 13:15
2017/12/17 13:43
2017/12/17 14:02 編集
2017/12/17 14:09
2017/12/17 14:11