LINUX.ORG.RU

Сообщения mrjbom

 

Как линкер настраивает символы в таблице символов?

Форум — Development

Приветствую.

У меня имеется следующий скрипт линкера:

( читать дальше... )

В коде объявляются несколько символов

.section .bss, "aw", @nobits
	.align 4096
boot_page_directory:
	.skip 4096
boot_page_table1:
	.skip 4096

И затем, для доступа к данным, что скрываются за ними, необходимо вручную вычитать 0xC0000000

.section .multiboot.text, "a"
.global _start
.type _start, @function
_start:
	# Physical address of boot_page_table1.
	movl $(boot_page_table1 - 0xC0000000), %edi

Почему так происходит? Ведь используя директиву AT() я указываю фактический адрес в который загрузится секция bss, а значит и данные которые в ней хранятся, следовательно символ boot_page_table1 должен указывать на фактический адрес данных и не требовать вычитания.

Получается, таблица символов формируется лишь исходя из счётчика позиции(который «.»)? Или что-то ещё влияет? Если я объявлю символ, который будет указывать на данные в .multiboot.data,

.section .multiboot.data, "aw"
some_data:
	.skip 1024

то должен ли я при обращении к нему производить вычитание 0xC0000000?

Я использую для линковки gcc

 , , ,

mrjbom
()

ld не видит strlen при подключенном заголовочном файле

Форум — Development

Приветствую.

Имеется файл kernel.c, к нему подключаю kernel.h в котором включены stdlib.h и string.h и в том же kernel.h имеется функция, которая использует strlen, компилирую удачно, но при линковке ld говорит это: «undefined reference to `strlen'».

Делаю всё следующей последовательностью команд: gcc -m32 -c kernel.c -o kc.o ld -m elf_i386 -T link.ld -o kernel-0 kasm.o kc.o

То есть, заголовочные файлы имеются и всё компилируется, а значит что проблем с кодом и нет, но линкер в отличии от компилятора не видит strlen Что же не так?

 

mrjbom
()

Не заработал графический интерфейс и msf в Kali Live CD

Форум — Security

Приветствую. Надо было проверить небольшую локальную сеть на наличие некоторых уязвимостей, выбрал для этих целей образ с Kali Linux amd64(хотя сам компьютер вероятнее всего был на x32), загрузился с неё, выбрал Live CD. Для начала на двух компьютерах не запустился графический интерфейс, это уже немного странно. Но не беда, думаю, загружу для начала metasploit(второй терминал заработал), выполняю msfconsole, после долгого ожидания загрузки получаю ошибку, нечто связанное с rubygems, хотя такого быть не должно, на домашнем компьютере metasploit(снова из второго терминала) прекрасно заработал. Проблемы с графическим интерфейсом меня не так интересуют, а вот непонятные проблемы с ruby на другом компьютере, с учётом того что это Live система, уже важны. Как с этой проблемой бороться? Спасибо.

 

mrjbom
()

RSS подписка на новые темы