【发布时间】:2015-03-16 12:12:57
【问题描述】:
所以在我编译并执行我的程序后,我收到以下错误消息:“Segmentation fault”,strace 错误消息为:
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Segmentation fault
问题是,有什么想法可以修复此错误并在 shell 代码中显示消息?
汇编代码:
;r3v.asm
;r3v3rs3c - 3x_z3r0
[SECTION .text]
global _start
_start:
jmp short ender
starter:
xor eax, eax
xor ebx, ebx
xor edx, edx
xor ecx, ecx
mov al, 4
mov bl, 1
pop ecx
mov dl, 18
int 0x80
xor ebx, ebx
int 0x80
ender:
call starter
db 'r3v3rs3c'
组装它:nasm -f elf r3v.asm 链接:ld -o r3v r3v.o 转储它: objdump -d r3v 将shell代码提取到测试程序中:
/*shelltest.c
r3v3s3c - 3x_z3r0*/
char code[] =
"\xeb\x15\x31\xc0\x31\xdb\x31\xd2\x31\xc9\xb0\x04\xb3\x01\x59\xb2\x12\xcd\x80\31\xdb\xcd\x80\xe8\xe6\xff\xff\xff\x72\x33\x76\x33\x72\x73\x33\x63";
;
int main(int argc, char **argv)
{
int (*exeshell)();
exeshell = (int (*)()) code;
(int)(*exeshell)();
}
然后我编译: gcc shelltest.c -o shelltest 执行它:./shelltest 并且输出显示为“Segmentation fault”。
【问题讨论】:
-
看到没有人知道你到底做了什么(你没有发布代码),我怀疑有人会知道如何解决你的问题。
-
发布您的代码。你的整个错误。
-
我们需要先建立术语。您认为什么是“shell 代码”?什么是“将十六进制提取到 C 脚本”?什么是“C 脚本”?通常我们有“shell脚本”和“C代码”。
-
这是一个运行时错误,首先尝试使用
printf或exit(0)查找代码的哪一部分运行良好,然后检查您的动态数组、指针、索引、释放和与记忆......我猜你有一个邪恶的野指针所以寻找他或发布你的代码 -
@StoryTeller 对不起,我是整个论坛 Qs 和 As 的新手,仍在练习如何以更详细和更易于理解的格式提问...