Неверный символ '\' в мнемоническом выражении - PullRequest
2 голосов
/ 25 февраля 2020

Я asm / shellcode newb ie и у меня проблемы с компиляцией примера шеллкода, включенного в качестве шаблона в ParrotOS.

Я просмотрел следующие темы, но не смог решить мою проблему:

Ошибка сборки: недопустимый символ '$' в мнемони c

Недопустимый символ (0xe2) в мнемони c

Я попытался использовать команду as вместо gcc, однако я получил эту же ошибку.

char code[] = 

    "\xe9\x1e\x00\x00\x00"  //          jmp    8048083 <MESSAGE>
    "\xb8\x04\x00\x00\x00"  //          mov    $0x4,%eax
    "\xbb\x01\x00\x00\x00"  //          mov    $0x1,%ebx
    "\x59"                  //          pop    %ecx
    "\xba\x0f\x00\x00\x00"  //          mov    $0xf,%edx
    "\xcd\x80"              //          int    $0x80
    "\xb8\x01\x00\x00\x00"  //          mov    $0x1,%eax
    "\xbb\x00\x00\x00\x00"  //          mov    $0x0,%ebx
    "\xcd\x80"              //          int    $0x80
    "\xe8\xdd\xff\xff\xff"  //          call   8048065 <GOBACK>
    "give me a bottle of rum!\r\n";     // OR       "\x48\x65\x6c\x6c\x6f\x2c\x20\x57"
                            //          "\x6f\x72\x6c\x64\x21\x0d\x0a"


int main(int argc, char **argv)
{
    (*(void(*)())code)();

    return 0;
}
gcc shellcode.s

shellcode.s: Assembler messages:
shellcode.s:1: Error: no such instruction: `char code[]='
shellcode.s:3: Error: invalid character '\' in mnemonic
shellcode.s:4: Error: invalid character '\' in mnemonic
shellcode.s:5: Error: invalid character '\' in mnemonic
shellcode.s:6: Error: invalid character '\' in mnemonic
shellcode.s:7: Error: invalid character '\' in mnemonic
shellcode.s:8: Error: invalid character '\' in mnemonic
shellcode.s:9: Error: invalid character '\' in mnemonic
shellcode.s:10: Error: invalid character '\' in mnemonic
shellcode.s:11: Error: invalid character '\' in mnemonic
shellcode.s:12: Error: invalid character '\' in mnemonic
shellcode.s:13: Error: no such instruction: `give me a bottle of rum!\r\n"'
shellcode.s:17: Error: junk `(int argc,char **argv)' after expression
shellcode.s:17: Error: operand size mismatch for `int'
shellcode.s:18: Error: no such instruction: `{'
shellcode.s:19: Error: junk at end of line, first unrecognized character is `('
shellcode.s:21: Error: no such instruction: `return 0'
shellcode.s:22: Error: junk at end of line, first unrecognized character is `}'

Ответы [ 2 ]

7 голосов
/ 25 февраля 2020

Это код C, но он имеет расширение .s, обозначающее сборку. Переименуйте ваш файл в shellcode.c.

6 голосов
/ 25 февраля 2020

По умолчанию g cc решает, на каком языке компилировать файл в соответствии с его расширением.

Правильно переименовать файл в соответствии с его содержимым (, как уже предлагалось) )

Если по какой-то причине вы не можете переименовать файл, вы также можете принудительно gcc скомпилировать файл с любым расширением на заданном (поддерживаемом) языке, используя параметр -x:

gcc -x c shellcode.s

Этот переключатель устанавливает язык, но не устанавливает параметры ссылки по умолчанию. Попытка gcc для файла C ++ для создания исполняемого файла завершается неудачей, поскольку драйвер ссылки gcc по умолчанию не добавляет библиотеки C ++.

...