Задать вопрос
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами

Отладка небольших ассемблерных кусков кода?

Допустим я разбираю некую программу в дизассемблере IDA.
Заинтересовался неким участком кода:
5fcfb5692858a573859218.png
(Картинка приведена для иллюстрации)
Я его хочу скопировать, вставить свои значения в регистры, указать свои области данных, и прочее - в общем погонять небольшой кусок кода вне контекста программы. Где это удобнее сделать дабы минимизировать написание бойлерплейта?
Примерно как в этом коде:
int main() {
	int a = 1;
	int b = 3;
	int c;

	__asm {
		mov eax, a
		mov ebx, b
		add eax, ebx
		mov c , eax
	}

	printf("a + b = %x + %x = %x\n", a, b, c);
}

только проблема в том, что в gcc формат ассемблерных вставок другой, и не такой удобный...
  • Вопрос задан
  • 292 просмотра
Подписаться 4 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
только проблема в том, что в gcc формат ассемблерных вставок другой

Разберись, потом будешь использовать его с удовольствием:
int main() {
  int a = 1;
  int b = 3;
  int c;

  asm (
    "mov %[a], %[c]\n\t"
    "add %[b], %[c]\n\t"
    : [c] "=mr" (c)
    : [a] "mr" (a), [b] "mr" (b));

  printf("a + b = %x + %x = %x\n", a, b, c);
}
Ответ написан
@4144
чтобы использовать привычный синтаксис ассембрерного кода, используйте внутри asm блока команду ".intel_syntax;"
asm {
    ".intel_syntax;"
    "mov eax, 10;"
    "mov ebx, 20;"
    "add eax, ebx;"
    "mov edx, eax;"
    ".att_syntax;"
  };

Для использования переменных, используйте подстановки из ответа jcmvbkbc или макросы препроцессора.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы