Доброго времени суток! Недавно наткнулся на приблизетельно вот такую "вещь": #define macros 0x0F65
Я вот не понимаю как заранее можно узнать адрес объекта в памяти и потом использовать это. Я думал это что-то связанное со статической или динамической адресациец. Решил погуглить, но ничего нормально не смог понять.
Там было не точь в точь такое. Мне в голову пришла идея сразу же попытаться считать его значение. Но дело в том что там было много функций которые оказались макросами, а определении вот это.
Zorroti, это обычное изменение поведения приложения при помощи либы, которая ставит хуки. Адреса в макросах - это адреса функций в уже скомпиленном приложении, поведение которого меняют. То есть эти адреса уже заранее известны.
2utm, накину ещё. Адрес в момент работы препроцессора узнать не получится, но вот зафосить, чтобы линковщик положил функцию по какому-нибудь адресу - легко. Для этого используются скрипты линковщика. Зачастую такое может использоваться, чтобы начать выполнение с определенного места (ещё до инициализации и перехода к main)
У функций в уже скомпилированном коде адреса будут могут быть фиксированными = известными заранее.
В вашем случае видимо так и есть.
А вот как узнать его - это уже отдельный вопрос.
Василий Банников, на этапе линковки. И только если линкуется не-PIE исполняемый файл. И только для функций из этого же исполняемого файла. В противном случае -- нет, адреса функций неизвестны до того момента, пока динамический линковщик (или стаб встроенный в PIE) не вычислит их не не запишет в GOT.