reader@hacking:~/booksrc $ cp a.out a
reader@hacking:~/booksrc $ ./a SLEDLESS
SLEDLESS is at 0xbfffff4e
reader@hacking:~/booksrc $ cp a.out bb
reader@hacking:~/booksrc $ ./bb SLEDLESS
SLEDLESS is at 0xbfffff4c
reader@hacking:~/booksrc $ cp a.out ccc
reader@hacking:~/booksrc $ ./ccc SLEDLESS
SLEDLESS is at 0xbfffff4a
reader@hacking:~/booksrc $ ./a.out SLEDLESS
SLEDLESS is at 0xbfffff46
reader@hacking:~/booksrc $ gdb -q
(gdb) p 0xbfffff4e - 0xbfffff46
$1 = 8
(gdb) quit
reader@hacking:~/booksrc $
Он в основном создает разные файлы с разными длинами имен файлов, чтобы посмотреть, как это повлияет на память переменной среды SLEDLESS.
Это его объяснение:
Как показывает предыдущий эксперимент, длина имени исполняемой программы влияет на расположение экспортируемых переменных среды. Общая тенденция, по-видимому, заключается в уменьшении на два байта адреса переменной среды при каждом увеличении длины имени программы на один байт. Это верно и для имени программы a.out, поскольку разница в длине между именами a.out и a составляет четыре байта, а разница между адресами 0xbfffff4e и 0xbfffff46 составляет восемь байтов. Это должно означать, что имя исполняемой программы также находится где-то в стеке, что вызывает смещение.
Разве общая тенденция не должна уменьшаться на 2 бита каждый раз? И поэтому все остальные места, которые он говорит, байты, они должны быть заменены на биты?