Что означает «-0x1(%edx,%ecx,1)» в выводе objdump?
Вопрос
Используя objdump для понимания двоичного файла, я понимаю, что недостаточно свободно разбираюсь в синтаксисе ASM.Что означает следующее понятие?
xor %al,-0x1(%edx,%ecx,1)
И пока вы этим занимаетесь, что мне следует искать, чтобы найти документы о таких понятиях?
Решение
Круглые скобки представляют собой смещения памяти:
-0x1(%edx,%ecx,1)
(синтаксис AT&T) равен [edx+ecx*1-1]
(синтаксис Intel)
Краткое руководство по Синтаксис сборки AT&T (согласно вашему запросу).
Другие советы
Это эксклюзивный вариант или с содержимым младшего байта (%al) регистра «a» и содержимым памяти по адресу, которое представляет собой сумму 32-битных регистров «d» (%edx), «c». ' умноженный на 1 (%ecx,1) и -1.Результат записывается обратно в %al.В С
al ^= (char*)(edx+ecx*1 - 1);
Вы можете поискать подобные вещи на куча песка или в документации Intel/AMD.