ฉันพยายามรวบรวมเฟิร์มแวร์สำหรับ linksys WRVS4400N ของฉัน
ls
แสดงให้เห็นว่ามีอยู่จริง แต่เมื่อพยายามเรียกใช้มันทุบตีจะบอกว่าไม่มีอยู่ ฉันสามารถทำได้cat
และเป็นไฟล์ที่เรียกใช้งานได้ไม่ใช่เชลล์สคริปต์
ฉันพยายามรวบรวมเฟิร์มแวร์สำหรับ linksys WRVS4400N ของฉัน
ls
แสดงให้เห็นว่ามีอยู่จริง แต่เมื่อพยายามเรียกใช้มันทุบตีจะบอกว่าไม่มีอยู่ ฉันสามารถทำได้cat
และเป็นไฟล์ที่เรียกใช้งานได้ไม่ใช่เชลล์สคริปต์
คำตอบ:
คุณกล่าวว่าการส่งออกของเป็นfile mkdep
32-bit elf
คุณกำลังเรียกใช้ VM 64 บิต
ตัวอย่าง:
$ uname -m
x86_64
$ ls -l ./example
-rwxr-xr-x 1 root root 92312 2011-08-18 16:52 ./example
$ file ./example
example: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ ./example
-bash: ./example: No such file or directory
เพียงสร้าง VM 32 บิตใหม่และรวบรวมไว้ที่นั่น
มันถูกตั้งค่าให้สามารถเรียกใช้งานได้หรือไม่? chmod +x filename
ถ้าไม่เช่นนั้น อยู่ในเส้นทางของคุณหรือไม่ ถ้าไม่เช่นนั้นเรียกว่าเป็นมากกว่าแค่./filename
filename
เมื่อคุณพยายามเรียกใช้ไฟล์และทุบตีบอกว่าไม่มีอยู่บางครั้งหมายความว่า bash เชื่อว่าไฟล์นั้นเป็นสคริปต์และไม่มีล่ามที่ระบุในบรรทัดแรก (#!)
หากไฟล์ชื่อmkdep
ฉันจะโพสต์ผลลัพธ์ของ
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
คำสั่ง strace ให้ข้อมูลเกี่ยวกับการเรียกใช้ระบบเช่นstrace ls 2>ls.t
วางคำสั่งต่อไปนี้ใน ls.t
execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0 brk (0) = 0x8061000 access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว) mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000 access ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว) open ("/ etc / ld.so.cache", O_RDONLY) = 3 fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 32311, ... }) = 0 mmap2 (NULL, 32311, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f7a000 ปิด (3) = 0 access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว) open ("/ lib / librt.so.1", O_RDONLY) = 3 อ่าน (3, "\ 177ELF \ 1 \ 1 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 3 \ 0 \ 3 \ 0 \ 3 \ 0 \ 1 \ 0 \ 0 \ 0 \ 240 \ 30 \ 0 \ 0004 \ 0 \ 0 \ 0 "... , 512) = 512 fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 30624, ... }) = 0
strace ./mkdep 2>mkdep.strace.txt
เช่นนี้จะทำให้คุณมีความคิดในสิ่งที่เกิดขึ้น คุณอาจต้องติดตั้ง strace จากที่เก็บ
คุณเปลี่ยน IFS ในสคริปต์ของคุณหรือไม่ ฉันก็พบปัญหาเดียวกันในหนึ่งในสคริปต์ของฉันและคิดเหมือนกัน (ไฟล์ 32 บิตถูกอ่านโดยเชลล์สคริปต์บนเครื่อง 64 บิต) แต่นั่นไม่ใช่ปัญหาในกรณีของฉัน แต่ฉันเปลี่ยน IFS เป็นจุลภาค ',' และกลับสู่บรรทัดใหม่ซึ่งทำให้ parser สับสนและทำให้เกิดข้อผิดพลาดนี้
ฉันเพิ่งลบการเปลี่ยนแปลงใด ๆ ใน IFS และใช้งานได้ดีในขณะนี้ !!!