Я работаю над подсчетом количества инструкций по сборке в дизассемблированном коде (add, sub, jmp, et c.). Я также должен учитывать условия, которые могут вызвать циклы / скачки, требующие от меня многократного подсчета набора инструкций. Следовательно, мне нужно записывать значения регистров, поэтому, когда я сталкиваюсь с таким условием, как «jne», я буду знать, перескочил ли код, или я могу просто продолжить синтаксический анализ дизассемблированного кода.
Я сейчас нахожусь запутался в начальных значениях регистров вроде (edx, eax, rbp, rsp, et c.). Я использовал objdump для сброса всего кода сборки, и я вижу, что в моей дизассемблированной функции <main>
первая строка кода сборки:
push rbp
mov rbp, rsp
sub rsp, 0xdb0
Понятия не имею где инициализируется rbp. Когда я сделал контрольную F для «rbp», я увидел первое, что всплывает, это инструкция «rex.WRX pu sh rbp». Это инициализирует rbp равным 0?
Я также не понимаю, откуда начинается код сборки. Первоначально я думал, что это началось с <main>
, но я также вижу другие функции, такие как <start>
и <init>
.
Любые пояснения приветствуются!