LINUX.ORG.RU

почему сегфолтится програмка??


0

0

$cat 1.c

#include <unistd.h>
#include <string.h>

void main(void) {
char b[256];
strcpy(b,«abc»);
return;
}

$gcc -o 1 1.c

$strace ./1
execve("./1", ["./1"], [/* 22 vars */]) = 0
brk(0) = 0x804a000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77ae000
access(«/etc/ld.so.preload», R_OK) = -1 ENOENT (No such file or directory)
open(«/etc/ld.so.cache», O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=39279, ...}) = 0
mmap2(NULL, 39279, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb77a4000
close(3) = 0
open(«/lib/libc.so.6», O_RDONLY) = 3
read(3, «\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 n\1\000»..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=1852140, ...}) = 0
mmap2(NULL, 1620360, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7618000
mprotect(0xb779d000, 4096, PROT_NONE) = 0
mmap2(0xb779e000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x185) = 0xb779e000
mmap2(0xb77a1000, 10632, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb77a1000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7617000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb76176c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb779e000, 8192, PROT_READ) = 0
mprotect(0xb77cd000, 4096, PROT_READ) = 0
munmap(0xb77a4000, 39279) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Process 29949 detached

Ответ на: комментарий от edigaryev

да это я вырезал из другой проги. unistd.h не нужен - сегфолтится и без него. Проблема в том что когда собираю на другом компе, и переношу на свой, то бинарник работает.

victorb ★★ ()

Какой-то глобальный ахтунг наподобие libc6.
apt-get update && apt-get upgrade && reboot

markevichus ★★★ ()

Только по-настоящему так не пиши :) strcpy не безопасная. Приглядись strncpy или memcpy. У мелкософта есть свои собственные реализации безопасного копирования. А прежде чем что-то писать в буфер, его канонично надо занулять memset'ом.

stevejobs ★★★★☆ ()

> почему сегфолтится програмка??

Кривое железо и/или слако-гента в кривых руках

Led ★★★☆☆ ()
Ответ на: комментарий от stevejobs

> А прежде чем что-то писать в буфер, его канонично надо занулять memset'ом.

а окропить святой водой не надо?

ahonimous ()

Какие версии gcc на другом и на своём? Попробуй int main()...return 0;. А ещё man gcc, думаю, у тебя после завершения падает.

fa652897 ()
Ответ на: комментарий от victorb

скомпилированное на моей машине сегфолтится и на другой.

Выложи куда-нибудь этот бинарник.

Deleted ()
Ответ на: комментарий от anon_666

люди даже постарались и написали своё

Норкоманы Велосипедисты.

anon_666 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.