exe C时出现分段错误错误
Posted
技术标签:
【中文标题】exe C时出现分段错误错误【英文标题】:Segmentation fault error when exe C 【发布时间】: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 的新手,仍在练习如何以更详细和更易于理解的格式提问...
【参考方案1】:
当前,您的字符串代码将被放置在程序内存的一部分中,当您将数组声明为可变(而不是 const)时,该内存被声明为不可执行。当您尝试将其作为函数运行时,您的操作系统会看到您正在尝试在无法执行的内存区域中运行代码,并且会因段错误而终止您的程序。
要解决此问题,请将您的 code
声明更改为 const char
即
const char code[] = "\xeb......."
这将允许编译器将其放入可执行内存中,从而允许它运行。
【讨论】:
我进行了更改,它删除了“分段错误”消息并将其替换为所需的输出:)以上是关于exe C时出现分段错误错误的主要内容,如果未能解决你的问题,请参考以下文章