助记符中的无效字符“\”
Invalid character '\' in mnemonic
我是 asm/shellcode 新手,我在编译 ParrotOS 中作为模板包含的示例 shellcode 时遇到了问题。
我查看了以下主题,但无法解决我的问题:
Assembly error: invalid character '$' in mnemonic
我尝试使用 as
命令而不是 gcc
,但是我得到了同样的错误。
char code[] =
"\xe9\x1e\x00\x00\x00" // jmp 8048083 <MESSAGE>
"\xb8\x04\x00\x00\x00" // mov [=10=]x4,%eax
"\xbb\x01\x00\x00\x00" // mov [=10=]x1,%ebx
"\x59" // pop %ecx
"\xba\x0f\x00\x00\x00" // mov [=10=]xf,%edx
"\xcd\x80" // int [=10=]x80
"\xb8\x01\x00\x00\x00" // mov [=10=]x1,%eax
"\xbb\x00\x00\x00\x00" // mov [=10=]x0,%ebx
"\xcd\x80" // int [=10=]x80
"\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 `}'
这是 C 代码,但它有一个 .s
扩展名,表示汇编。将文件重命名为 shellcode.c
.
默认情况下,gcc 根据文件的扩展名决定用哪种语言编译文件。
根据内容正确重命名文件是正确的做法()
如果由于某种原因您无法重命名文件,您也可以使用 -x
选项强制 gcc
以给定(支持的)语言编译具有任何扩展名的文件:
gcc -x c shellcode.s
此开关设置语言但不设置默认 link 选项。尝试 gcc
在 C++ 文件上创建可执行文件失败,因为 gcc
link 驱动程序默认不添加 C++ 库。
我是 asm/shellcode 新手,我在编译 ParrotOS 中作为模板包含的示例 shellcode 时遇到了问题。
我查看了以下主题,但无法解决我的问题:
Assembly error: invalid character '$' in mnemonic
我尝试使用 as
命令而不是 gcc
,但是我得到了同样的错误。
char code[] =
"\xe9\x1e\x00\x00\x00" // jmp 8048083 <MESSAGE>
"\xb8\x04\x00\x00\x00" // mov [=10=]x4,%eax
"\xbb\x01\x00\x00\x00" // mov [=10=]x1,%ebx
"\x59" // pop %ecx
"\xba\x0f\x00\x00\x00" // mov [=10=]xf,%edx
"\xcd\x80" // int [=10=]x80
"\xb8\x01\x00\x00\x00" // mov [=10=]x1,%eax
"\xbb\x00\x00\x00\x00" // mov [=10=]x0,%ebx
"\xcd\x80" // int [=10=]x80
"\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 `}'
这是 C 代码,但它有一个 .s
扩展名,表示汇编。将文件重命名为 shellcode.c
.
默认情况下,gcc 根据文件的扩展名决定用哪种语言编译文件。
根据内容正确重命名文件是正确的做法(
如果由于某种原因您无法重命名文件,您也可以使用 -x
选项强制 gcc
以给定(支持的)语言编译具有任何扩展名的文件:
gcc -x c shellcode.s
此开关设置语言但不设置默认 link 选项。尝试 gcc
在 C++ 文件上创建可执行文件失败,因为 gcc
link 驱动程序默认不添加 C++ 库。