Используя Hex-Rays IDA ID C Language, как вы можете получить доступ к переменной как другому типу на уровне байтов, например, как float как dword? - PullRequest
0 голосов
/ 13 апреля 2020

Язык сценариев ID C внутри IDA (v7.0 x64) предлагает функции для исправления одного или нескольких байтов по заданному адресу с заданным 8-64-битным целочисленным значением, используя одно из следующих: patch_byte, patch_word, patch_dword , patch_qword. Я ищу способ сделать это и для других типов данных, особенно для 32-битного значения с плавающей запятой.

Я написал функцию, которая ищет адрес 'ea' в разобранном файле dll, и хотите изменить значение по этому адресу на новое значение 'v', которое передается в качестве параметра этой функции. В зависимости от типа 'v', он должен обрабатываться по-разному внутри функции. Для обычного 32-разрядного длинного целого числа простой 'patch_dword (ea, v)' делает свою работу, но у меня возникают проблемы с выяснением того, как записать значение типа float в адрес, так как вы не можете явно объявить типы переменных - все они "auto", и использование patch_dword с плавающей точкой неявно преобразует значение с плавающей точкой в ​​целое число, которое мне не нужно.

Пример другими словами: данный float v = 1.0 = "00 00 80 3F ", как соединить 4 байта" 00 00 80 3F "с адресом?

Или, если на то пошло, как я могу получить доступ к любому из 4 байтов этого числа с плавающей запятой, а затем записать их по этому адресу ?

Я искал в справочнике по функциям несколько дней безуспешно, а также пытался использовать указатели (что не удается из-за типов "auto", которые преобразуют его обратно в числа с плавающей точкой). Я также попытался обдумать концепцию структур с использованием объединения, но, похоже, это работает только для определения структур внутри разобранной программы, а не для данной переменной.

Так что я надеюсь, что кто-то с опыт может указать мне правильное направление - есть ли какая-нибудь функция, которая выполняет то, что я пытался описать выше? Или сочетание функций? Или неявная конструкция преобразования / приведения этого скриптового языка, о которой может даже не знать даже начинающий?

...