arm kernel object disassemble 문의

dyjin의 이미지

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]
AustinKim의 이미지


어셈블리 명령어만 봐서는 어떤 내용인지 감을 잡기 어려운데요.
(명령어를 보니 _SomeFunction 함수에는 2개 인자가 전달된 것 같습니다만.)

46539-46557 라인에 해당되는 소스 코드의 내용(전역 변수 포함)을 올려주시면,
정확히 어떤 부분을 확인하고 싶은지 알 수 있을 것 같아요.

(개인블로그)
http://rousalome.egloos.com

dyjin의 이미지

안녕하세요. 감사합니다.
코드는 별거아닌데, 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 할 때 치환되는 방법이 있나요?
감사합니다. 코드를 올려드리지 못해 죄송합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.