"İkili dosya çalıştırılamıyor" yardım lütfen

Başlatan omerfarukaydin, 13 Şubat 2014 - 00:49:48

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

omerfarukaydin

Projem ile alakalı küçük bir örnek yazdım. System() ile örneğin calendar dosyasını açmak amacım programı yazıp derledim ve adını takvim koydum. Usr/bin'e yerleştirdikten sonra erişime açtım. Konsolda "takvim" ve "./takvim" olarak yazdım ikisindede "ikili dosya çalıştırılamıyor diyor. Herhangi bir çözümü veya bilgisi olan yardım ederse sevinirim :-)

ekremsenturk

1 Sahipliliklerine bak. Sabibi okuyabili ve yazabilir ve, grubu ve diğerleri okuyabilir olmalı.

2. Dosya izinlerine bak, dosya çalıştırılabilir olmalı.

omerfarukaydin

Alıntı yapılan: ekremsenturk - 13 Şubat 2014 - 10:14:03
1 Sahipliliklerine bak. Sabibi okuyabili ve yazabilir ve, grubu ve diğerleri okuyabilir olmalı.

2. Dosya izinlerine bak, dosya çalıştırılabilir olmalı.
Öyle zaten. Paylaşımda bahsettim erişime her türlü açık

ekremsenturk

Dosyayı hangi derleyici ile derledin ve hangi sistem'de derledin ?

omerfarukaydin


ekremsenturk

Bu hata normalinde sistem ile uyumsuz ikili dosyalarda çıkar. Gcc sürümü neydi ve şu an kullandığın Linux sürümün, programının derlediğin Pardus'mu ?

omerfarukaydin

Komut satırından derledim "gcc x.c -o y" gibi örneğin. Pardus üzerinde derledim

ekremsenturk

Programı Pardus'tamı, Ubuntu'damı çalıştımaya çalıışıyorsun ?

omerfarukaydin


ekremsenturk

Pardus veya ubuntu aslında fark etmez, Ancak eski bir Parsus sürümünde ve farklı bir Gcc sürümünde derlenmiş olabilirmi ? ihtimalini kaldırmak için sordum.

Derleme esnasında herhangi bir hata bildirimi almışmıydın? hatırlıyormusun.

omerfarukaydin

Pardus 2013 versiyonu. Hata almamıştım. Sorunsuz derledi.

ekremsenturk

Derleme işlemini Masaüstündemi ? kullanıcı dizinindemi ? yapmıştın.

omerfarukaydin

Konsoldan masaüstüne gelmiştim yanlış hatırlamıyorsam

ekremsenturk

Bir önceki soru biraz gereksiz kaldı. sudo takvim komutunu dene (ve şifreni gir)

heartsmagic

strace /usr/bin/takvim
çıktısına da bir bakabilir miyiz? Çıktı çok uzun olabilir, sonlarına doğru olan bölümü geçersin buraya.

Ayrıca, yazdığın kodu görebilir miyiz bir sıkıntı yoksa.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sem

Kodları paylaşabilirmisiniz?

bir de


ls -lrt /usr/bin | grep -i takvim


Çıktısını da paylaşabilir misiniz?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

omerfarukaydin

Alıntı yapılan: heartsmagic - 14 Şubat 2014 - 15:03:22
strace /usr/bin/takvim
çıktısına da bir bakabilir miyiz? Çıktı çok uzun olabilir, sonlarına doğru olan bölümü geçersin buraya.

Ayrıca, yazdığın kodu görebilir miyiz bir sıkıntı yoksa.
çıktı şöyle;
execve("/usr/bin/takvim", ["/usr/bin/takvim"], [/* 29 vars */]) = -1 ENOEXEC (Exec format error)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe484a7c000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Exec format error\n", 32strace: exec: Exec format error
) = 32
close(3)                                = 0
munmap(0x7fe484a7c000, 4096)            = 0
exit_group(1)                           = ?


Alıntı yapılan: sem0900 - 14 Şubat 2014 - 19:52:07
Kodları paylaşabilirmisiniz?

bir de


ls -lrt /usr/bin | grep -i takvim


Çıktısını da paylaşabilir misiniz?
sizin komutunuz ile çıktı şöyle;
-rwxrwxrwx 1 root   root      110776 Şub 10 19:58 takvim



Kodları bilmediğim bir sebepten dolayı bulamıyorum. tekrar yazıp veya bulduktan sonra paylaşabilirim. zaten öyle önemli bir kod değil system() ile örnek olarak yazmıştım.

sem

Anladım kaynak kod sizde olmadığına göre farklı bir makinada derlemiştiniz. Derlediğiniz makina işlemcisi 64 bit iken şu an denediğiniz mimari 32 bit olabilir mi? Ya da zıttı gibi bir durum. Strace çıktısındaki 32 ne anlama geliyor bilmiyorum açıkcası ama bende yaptığı izlenimi paylaşmak istedim.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

omerfarukaydin


PMI

merhaba mümkünse

file /usr/bin/takvim
ldd /usr/bin/takvim
objdump -d /usr/bin/takvim -M intel|grep main -A15

komutlarının çıktısını ayrıca

strace -i /usr/bin/takvim

komutunun 5 6 satırlık bir kısmını buraya geçebilirmisiniz.

bana 32 bit de derleyip 64 bitte çalıştırıyormuşsunuz gibi geldi
lanet olsun dostum sadece biraz gerginim

omerfarukaydin

file /usr/bin/takvim
ldd /usr/bin/takvim
objdump -d /usr/bin/takvim -M intel|grep main -A15

komutların çıktısı sırasıyla;
/usr/bin/takvim: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
özdevimli bir çalıştırılabilir değil
objdump: invalid option -- 'A'
Usage: objdump <option(s)> <file(s)>
Display information from object <file(s)>.
At least one of the following switches must be given:
  -a, --archive-headers    Display archive header information
  -f, --file-headers       Display the contents of the overall file header
  -p, --private-headers    Display object format specific file header contents
  -P, --private=OPT,OPT... Display object format specific contents
  -h, --[section-]headers  Display the contents of the section headers
  -x, --all-headers        Display the contents of all headers
  -d, --disassemble        Display assembler contents of executable sections
  -D, --disassemble-all    Display assembler contents of all sections
  -S, --source             Intermix source code with disassembly
  -s, --full-contents      Display the full contents of all sections requested
  -g, --debugging          Display debug information in object file
  -e, --debugging-tags     Display debug information using ctags style
  -G, --stabs              Display (in raw form) any STABS info in the file
  -W[lLiaprmfFsoRt] or
  --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
          =frames-interp,=str,=loc,=Ranges,=pubtypes,
          =gdb_index,=trace_info,=trace_abbrev,=trace_aranges]
                           Display DWARF info in the file
  -t, --syms               Display the contents of the symbol table(s)
  -T, --dynamic-syms       Display the contents of the dynamic symbol table
  -r, --reloc              Display the relocation entries in the file
  -R, --dynamic-reloc      Display the dynamic relocation entries in the file
  @<file>                  Read options from <file>
  -v, --version            Display this program's version number
  -i, --info               List object formats and architectures supported
  -H, --help               Display this information

The following switches are optional:
  -b, --target=BFDNAME           Specify the target object format as BFDNAME
  -m, --architecture=MACHINE     Specify the target architecture as MACHINE
  -j, --section=NAME             Only display information for section NAME
  -M, --disassembler-options=OPT Pass text OPT on to the disassembler
  -EB --endian=big               Assume big endian format when disassembling
  -EL --endian=little            Assume little endian format when disassembling
      --file-start-context       Include context from start of file (with -S)
  -I, --include=DIR              Add DIR to search list for source files
  -l, --line-numbers             Include line numbers and filenames in output
  -F, --file-offsets             Include file offsets when displaying information
  -C, --demangle[=STYLE]         Decode mangled/processed symbol names
                                  The STYLE, if specified, can be `auto', `gnu',
                                  `lucid', `arm', `hp', `edg', `gnu-v3', `java'
                                  or `gnat'
  -w, --wide                     Format output for more than 80 columns
  -z, --disassemble-zeroes       Do not skip blocks of zeroes when disassembling
      --start-address=ADDR       Only process data whose address is >= ADDR
      --stop-address=ADDR        Only process data whose address is <= ADDR
      --prefix-addresses         Print complete address alongside disassembly
      --[no-]show-raw-insn       Display hex alongside symbolic disassembly
      --insn-width=WIDTH         Display WIDTH bytes on a single line for -d
      --adjust-vma=OFFSET        Add OFFSET to all displayed section addresses
      --special-syms             Include special symbols in symbol dumps
      --prefix=PREFIX            Add PREFIX to absolute paths for -S
      --prefix-strip=LEVEL       Strip initial directory names for -S
      --dwarf-depth=N        Do not display DIEs at depth N or greater
      --dwarf-start=N        Display DIEs starting with N, at the same depth
                             or deeper

objdump: supported targets: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
objdump: supported architectures: i386 i386:x86-64 i386:x64-32 i8086 i386:intel i386:x86-64:intel i386:x64-32:intel l1om l1om:intel k1om k1om:intel plugin

The following i386/x86-64 specific disassembler options are supported for use
with the -M switch (multiple options should be separated by commas):
  x86-64      Disassemble in 64bit mode
  i386        Disassemble in 32bit mode
  i8086       Disassemble in 16bit mode
  att         Display instruction in AT&T syntax
  intel       Display instruction in Intel syntax
  att-mnemonic
              Display instruction in AT&T mnemonic
  intel-mnemonic
              Display instruction in Intel mnemonic
  addr64      Assume 64bit address size
  addr32      Assume 32bit address size
  addr16      Assume 16bit address size
  data32      Assume 32bit data size
  data16      Assume 16bit data size
  suffix      Always display instruction suffix in AT&T syntax



strace -i /usr/bin/takvim
bu kod karşılığında ise;
[    7fa7d56abf87] execve("/usr/bin/takvim", ["/usr/bin/takvim"], [/* 29 vars */]) = -1 ENOEXEC (Exec format error)
[    7fa7d56cf107] dup(2)               = 3
[    7fa7d56cee58] fcntl(3, F_GETFL)    = 0x8002 (flags O_RDWR|O_LARGEFILE)
[    7fa7d56ce434] fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
[    7fa7d56d748a] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa7d5bb2000
[    7fa7d56daab0] lseek(3, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
[    7fa7d56ceaf0] write(3, "strace: exec: Exec format error\n", 32strace: exec: Exec format error
) = 32
[    7fa7d56cea30] close(3)             = 0
[    7fa7d56d74b7] munmap(0x7fa7d5bb2000, 4096) = 0
[    7fa7d56abf68] exit_group(1)        = ?


yazılım 64 bit sistemde derledim ve 64 bit sistemde çalıştırmaya çalışıyorum. Bende şaşırdım.

PMI

ilk olarak kod dinamik kütüphane kullanmıyor dolayısıyla ldd komutuyla da ayrıntıya inememiş
kodu derlerken hangi parametreleri kullandığını hatırlarsan çok faydalı olur
objdump komutunda da pipe (|) koymayı unutmuşsun  ;) tekrar o komutu çalıştırabilirmisin.
lanet olsun dostum sadece biraz gerginim

omerfarukaydin

Alıntı yapılan: PMI - 15 Şubat 2014 - 00:16:26
ilk olarak kod dinamik kütüphane kullanmıyor dolayısıyla ldd komutuyla da ayrıntıya inememiş
kodu derlerken hangi parametreleri kullandığını hatırlarsan çok faydalı olur
objdump komutunda da pipe (|) koymayı unutmuşsun  ;) tekrar o komutu çalıştırabilirmisin.

0000000000000000 <main>:
   0: 55                    push   rbp
   1: 48 89 e5              mov    rbp,rsp
   4: be 00 00 00 00        mov    esi,0x0
   9: bf 00 00 00 00        mov    edi,0x0
   e: e8 00 00 00 00        call   13 <main+0x13>
  13: be 00 00 00 00        mov    esi,0x0
  18: 48 89 c7              mov    rdi,rax
  1b: e8 00 00 00 00        call   20 <main+0x20>
  20: b8 00 00 00 00        mov    eax,0x0
  25: 5d                    pop    rbp
  26: c3                    ret   

0000000000000027 <_Z41__static_initialization_and_destruction_0ii>:
  27: 55                    push   rbp
  28: 48 89 e5              mov    rbp,rsp
  2b: 48 83 ec 10          sub    rsp,0x10
  2f: 89 7d fc              mov    DWORD PTR [rbp-0x4],edi
  32: 89 75 f8              mov    DWORD PTR [rbp-0x8],esi
  35: 83 7d fc 01          cmp    DWORD PTR [rbp-0x4],0x1
  39: 75 27                jne    62 <_Z41__static_initialization_and_destruction_0ii+0x3b>
  3b: 81 7d f8 ff ff 00 00 cmp    DWORD PTR [rbp-0x8],0xffff
  42: 75 1e                jne    62 <_Z41__static_initialization_and_destruction_0ii+0x3b>
  44: bf 00 00 00 00        mov    edi,0x0
--
0000000000000064 <_GLOBAL__sub_I_main>:
  64: 55                    push   rbp
  65: 48 89 e5              mov    rbp,rsp
  68: be ff ff 00 00        mov    esi,0xffff
  6d: bf 01 00 00 00        mov    edi,0x1
  72: e8 b0 ff ff ff        call   27 <_Z41__static_initialization_and_destruction_0ii>
  77: 5d                    pop    rbp
  78: c3                    ret

buyrun :)

PMI

64 bitte derlenmis. O kısımda sorun yok. Ama kutuphaneler statik baglanmis. Muhtemelen kodu derlerken yanlis parametreler kullanmissin. Uzgunum ama kaynak kodu tekrar derlemelisin. Aklima baska bir cozum gelmiyor.
lanet olsun dostum sadece biraz gerginim

omerfarukaydin