Как я могу декодировать эту инструкцию "call * fs: 0x334", чтобы узнать точный адрес функции? - PullRequest
1 голос
/ 07 марта 2012

Во время выполнения, как я могу получить значение в регистре fs и вычислить адрес целевой функции в "call * fs: 0x334"?Какую сборку x86 я могу использовать?

1 Ответ

5 голосов
/ 07 марта 2012

Адрес целевой функции в call *fs:0x334 - это значение, хранящееся в fs:0x334.

Итак, если вы хотите узнать, что это за адрес, вы можете просто загрузить его.

например. mov rax, [fs:0x334] (нос) или mov %fs:0x334, %rax (газ).

Вам не нужно знать, на что указывает fs (что также хорошо: оно указывает на запись в таблице дескрипторов, которую вы можете иметь или не иметь права на чтение, которая указывает на линейный адрес, который может или не может быть доступен через любой другой селектор сегмента).

В x86-64 Linux ядро ​​и glibc взаимодействуют, чтобы гарантировать, что fs всегда указывает на локальную область потока для текущего запущенного потока. (В 32-битном Linux x86 вместо этого используется gs.)

...