Ghidra использует нечетные имена полей, такие как "._0_4_", для представления нестандартного размера доступа при декомпиляции C

Я использовал Ghidra для декомпиляции некоторых файлов библиотеки.o, изначально скомпилированных для ARMv7, для которых у меня есть файлы заголовков для некоторых функций и структур.

Допустим, у структуры есть несколько однобайтовых членов типа char:

struct myStruct {
   char memberA;
   char memberB;
   char memberC;
   char memberD;
} structInstance;

Если ассемблерный код, предположительно посредством оптимизации компилятора, когда он был построен, срезает угол и получает доступ к целому 32-битному слову символов за один раз, то декомпилированный код C будет представлять это как:

structInstance._0_4_

Первая цифра (0) - это смещение байта, с которого начинается, а вторая цифра (4) - количество байтов, к которым осуществляется доступ.

Однако, насколько я могу судить, это нестандартно и не будет перекомпилироваться - по крайней мере, не в GCC, и я нигде не могу найти ссылку на эту нотацию.

Есть ли способ настроить Ghidra для генерации декомпилированного кода, который на самом деле был бы действительным, т.е.

*(uint32_t)&structInstance.memberA

0 ответов

Другие вопросы по тегам