arm kernel object disassemble 문의
글쓴이: dyjin / 작성시간: 월, 2021/07/26 - 11:28오후
kernel object를 disassemble 코드를 확인하다 이해가 안되는 부분이 있어 문의드립니다.
parmeter r0 는 0 인상태로 호출됩니다.
46555 line의 load는 전역 구조체 변수를 읽는 것인데요 여기서 base address r3 는 46549 의 mla 에 의해서 0이 될 것으로 보이는데요, 어떻게 가능한것일까요? kernel module loading 시 뭔가 변형이 일어날 것 같은데요 고수님들의 조언 부탁드립니다.
코드는 문제없이 동작하는 코드입니다.
감사합니다.
46555 에서 access하려고하는 전역 변수의 위치는 아래와 같습니다.
readelf -s file.ko | grep global_symbol 70486: 0003314c 40 OBJECT GLOBAL DEFAULT 29 global_symbol
46539 0002c038 <_SomeFunction>: 46540 2c038: e1a0c00d mov ip, sp 46541 2c03c: e92ddff0 push {r4, r5, r6, r7, r8, r9, sl, fp, ip, lr, pc} 46542 2c040: e24cb004 sub fp, ip, #4 46543 2c044: e24ddf51 sub sp, sp, #324 ; 0x144 46544 2c048: e3002000 movw r2, #0 46545 2c04c: e3402000 movt r2, #0 46546 2c050: e3a03014 mov r3, #20 46547 2c054: e1a05000 mov r5, r0 46548 2c058: e1a09001 mov r9, r1 46549 2c05c: e0232093 mla r3, r3, r0, r2 46550 2c060: e24b0f55 sub r0, fp, #340 ; 0x154 46551 2c064: e3a01012 mov r1, #18 46552 2c068: e2400002 sub r0, r0, #2 46553 2c06c: e24b4f51 sub r4, fp, #324 ; 0x144 46554 2c070: e1a02003 mov r2, r3 46555 2c074: e1d370b2 ldrh r7, [r3, #2] 46556 2c078: e1f2c0b8 ldrh ip, [r2, #8]! 46557 2c07c: e5d38001 ldrb r8, [r3, #1]
Forums:
소스 코드의 내용(전역 변수 포함)을 올려주세요
어셈블리 명령어만 봐서는 어떤 내용인지 감을 잡기 어려운데요.
(명령어를 보니 _SomeFunction 함수에는 2개 인자가 전달된 것 같습니다만.)
46539-46557 라인에 해당되는 소스 코드의 내용(전역 변수 포함)을 올려주시면,
정확히 어떤 부분을 확인하고 싶은지 알 수 있을 것 같아요.
(개인블로그)
http://rousalome.egloos.com
감사합니다.
안녕하세요. 감사합니다.
코드는 별거아닌데, NDA 맺은 업체 코드라 올려드릴 수가 없습니다. 함수 인자는 2개맞구요,46555~46557은 첫번재 인자를 이용해서 전역 구조체 global_symbol의 member variable을 load하는 코드입니다.
제가 궁금한 것은 global_variable을 접근하는 46555의 r3 가 0으로 예상되는데 (46549의 mla에 의해서) 0번지를 access 하는게 왜 괜찮은가? 이 주소가 ko loading 시에 어떻게 실제 주소인 3341c로 치환되는가 입니다.
혹시 immediate #0들이 (46544, 46545 line) ko loading 할 때 치환되는 방법이 있나요?
감사합니다. 코드를 올려드리지 못해 죄송합니다.
댓글 달기