blokkeszköz emulálása úgy, hogy menjen a HDIO_GET_IDENTITY ioctl

Fórumok

Van egy 32 bites alkalmazás amit szeretnék szóra bírni egy modern rendszeren.

Eredetileg egy VirtualBox image-ben egy yocto alapú disztró amit nem tudok bootolni.

Ezt a rootfst-t lementettem, bechrootoltam rá.

Segmentation faulttal áll meg, de strace barátunk segített:

open("/dev/sda", O_RDONLY|O_NONBLOCK)   = -1 ENOENT (Nincs ilyen fájl vagy könyvtár)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} ---
+++ killed by SIGSEGV (core dumped) +++
Szegmentálási hiba (core készült)

Próbáltam alátenni egy USB pendrive-ot de azon nem megy a HDIO_GET_IDENTITY ioctl:

open("/dev/sda", O_RDONLY|O_NONBLOCK)   = 3
ioctl(3, HDIO_GET_IDENTITY, 0x80c4660)  = -1 EINVAL (Érvénytelen argumentum)
close(3)                                = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} ---
+++ killed by SIGSEGV (core dumped) +++
Szegmentálási hiba (core készült)

Van esetleg valami módszer arra, hogy specifikus ioctl-eket "eltérítsek", esetlegesen létezik valamilyen blokkeszköz emulátor amivel be tudnám csapni a programot?

Hozzászólások

hat lehet irni egy egyszeru wrappert C-ben es LD_LIBRARY_PRELOAD-al betolteni, igy lehet atverni pl. a vinyo sorozatszamot ellenorzo programokat

vagy futtasd qemu-val az mindent is tud emulalni :)

Pontosan mit is csinálnál? A yocto image-n van egy progi (valamiféle célprogram) amit a host rendszeren futtatnál, és ez a progi akarna megnyitni valami miatt a /dev/sda-t? Ami bele van vasalva ebbe a célprogramba?

Akar meg a loopback-ot is kiprobalhatod, es ha nincs /dev/sda akkor csinalsz egy symlinket ezen a neven ami a /dev/loopx-re mutat. Nem adnek sok eselyt hogy pont tudja ezt az ioctl-t, de hátha.