рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ
рдкрд┐рдЫрд▓реЗ рджреЛ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ
рдЬрд╛рд╡рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдФрд░
рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдпрджрд┐ рдкреНрд░рд┐рдп рдкрд╛рдардХ рдиреЗ рдЕрднреА рддрдХ рдЗрди рд▓реЗрдЦреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рддреЛ рдореИрдВ рдЙрдирдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рддрд╛ рд╣реВрдВред
рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реБрдЖ рдХрд┐ рдЕрднреА рддрдХ рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Dalvik bytecode рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢рдмреНрдж рднреА рдирд╣реАрдВ рдХрд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рддрд░реАрдХреЛрдВ рдореЗрдВ рдареАрдХ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдЕрдХреНрд╕рд░ рдЫрд┐рдкрд╛ рд╣реЛрддрд╛ рд╣реИ - рдЪрд╛рд▓рд╛рдХ рдмрдЪрд╛рд╡, рджрд┐рд▓рдЪрд╕реНрдк рдореИрд▓рд╡реЗрдпрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ, рд╢реВрдиреНрдп-рджрд┐рди рдХрдордЬреЛрд░рд┐рдпрд╛рдВред рдЗрд╕рд▓рд┐рдП, рдЖрдЬ рдореИрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реВрдВ, "рдкрд╛рдиреА" рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕реА / рд╕реА ++ рд╕реНрд░реЛрдд рдХреЛрдб (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдЬреЛ рднреА рдкреНрд░рд┐рдп рдкрд╛рдардХ, рд╡реЗ рд╡рд╣рд╛рдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ) рдХреЗ рдмрд┐рдирд╛ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдХреЛ рдбрд┐рдмрдЧ рдХрд░реЗрдВред
рдореЗрд░реА рдХрд╣рд╛рдиреА рд╕реЗ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ "рд╡рд┐рд╖рдп" рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдкрд╛рдардХ
рд╢рд╛рдпрдж рдпрд╣реА рд╡рд╣ рд╕рдм рдЬреНрдЮрд╛рди рдФрд░ рдХреМрд╢рд▓ рд╣реИ рдЬрд┐рд╕рдХреА рдкрд╛рдардХ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЪрд▓рд┐рдП рдЯреВрд▓реНрд╕ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдЙрдкрдХрд░рдг
рдЖрдЬ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:
- Android NDK рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ ARM рдХреЗ рд▓рд┐рдП gdb рдФрд░ gdbserverред рд╕реНрдерд╛рдкрдирд╛ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╣реИ ред
- Android рдПрд╕рдбреАрдХреЗ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ
adb
рдЙрдкрдпреЛрдЧрд┐рддрд╛ред рд╕реНрдерд╛рдкрдирд╛ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╣реИ ред - рдпрджрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдВрдбреНрд░реЙрдЗрдб-рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╣реИ - рддреЛ рдЗрд╕реЗ рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЪрд▓реЛ рддреИрдпрд╛рд░реА рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдгреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- Apktool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ .apk рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ,
////smali
рдХреА рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ ////smali
рдФрд░ рдкрддрд╛ рдХрд░реЗрдВ:
- рдбрд╛рд▓рд╡рд┐рдХ рдмрд╛рдпреЛрдЯреЗрдХ рд╕реЗ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдХреЛ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдЬрд┐рд╕рдореЗрдВ .so рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЗрди рдЬреЗрдПрдирдЖрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рд░реНрдп рд╕реНрдерд┐рдд рд╣реИрдВ;
////lib
рдХреЗ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдЗрд╕ .so рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╣рдЯрд╛ рджреЗрдВ ////lib
рдпрд╛ рдЙрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдЬрд┐рд╕ рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдФрд░ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдЬреЗрдПрдирдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рдХрд╣рд▓рд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХреБрдЫ рдЦрд╛рд╕ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдбрд╛рд▓реНрд╡рд┐рдХреЛрдб рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред- -D
-d
рд╕рд╛рде Apktool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ .apk рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдиреЗрдЯрдмреАрдиреНрд╕ рдореЗрдВ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡ рдХрд░реЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред - рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ NetBeans рдореЗрдВ рдбреАрдмрдЧрд┐рдВрдЧ
System.loadLibrary(...)
рдпрд╛ System.load(...)
рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЙрд╕ JNI рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░реЗрдВред рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдХрд┐рд╕реА рднреА рджреЗрд╢реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рдЯреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдпрд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред - рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рдПрдореБрд▓реЗрдЯрд░ рдкрд░ gdbserver рдкреБрд╢ рдХрд░реЗрдВ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЕрдм рдЬрдм рд╕рднреА рддреИрдпрд╛рд░рд┐рдпрд╛рдВ рдкреВрд░реА рд╣реЛ рдЧрдИ рд╣реИрдВ, рддреЛ рдЖрдк рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдбрд┐рдмрдЧрд┐рдВрдЧ
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕реАрдзреЗ рджреЛ рдбрд┐рдмрдЧрд░ рдХреЗ рддрд╣рдд рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╣реИ: рдиреЗрдЯрдмреАрдиреНрд╕ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдбрд┐рдмрдЧрд░ рдХреЗ рддрд╣рдд - рдбрд╛рд▓реНрд╡рд┐рдХ рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЬреАрдбреАрдмреА рдХреЗ рддрд╣рдд - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдкрд░ рдХреЙрд▓ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ, рдЕрдЧрд▓реЗ рднрд╛рдЧ, рдиреБрдХрд╕рд╛рди рджреЗрдЦреЗрдВред
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдкрд╛рдардХ рдиреЗ рдкрд┐рдЫрд▓реЗ "рддреИрдпрд╛рд░реА" рдЦрдВрдб рд╕реЗ рд╕рднреА рддреИрдпрд╛рд░реА рдкреВрд░реА рдХрд░ рд▓реА рд╣реИ, рддреЛ рдЕрдм рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ,
System.load(...)
рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЦреБрд▓рд╛ рд╣реИ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ
System.loadLibrary(...)
System.load(...)
рдпрд╛
System.loadLibrary(...)
рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣реАрдВ рд╕реНрдерд┐рдд рд╣реИред
System.loadLibrary(...)
, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд┐рдзрд┐ рдкрд░ рдкрд╣рд▓реА рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╛рдардХ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреМрди рд╕рд╛ рдЬреЗрдПрдирдЖрдИ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдореВрд▓ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред
рдЕрдЧрд▓рд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреГрдкрдпрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:
- рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдпрд╛ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рдПрдбреАрдмреА рдХрдВрд╕реЛрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП
abd shell
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред ADB рдХрдВрд╕реЛрд▓ рдореЗрдВ ps
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА PID рдвреВрдВрдвреЗрдВред рдПрдХ рд╣реА рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
gdbserver :5039
рдЬрд╣рд╛рдБ %PID%
рдЖрдкрдХреА рдЖрд╡реЗрджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ PID рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, gdbserver рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
Attached; pid = %PID% Listening on port 5039
рдЕрдм рд╕реЗ рдиреЗрдЯрдмреАрдиреНрд╕ рдореЗрдВ рдбреАрдмрдЧрд┐рдВрдЧ рдлреНрд░реАрдЬ рд╣реЛ рдЬрд╛рдПрдЧреАред рдпрд╛рдиреА рдмреЗрд╢рдХ рдЖрдк рд╡рд╣рд╛рдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИ рд╡рд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬрд┐рд╕реЗ рдЖрдк NetBeans рдореЗрдВ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ GDB рдбреАрдмрдЧрд░ рдХреЗ рддрд╣рдд рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдШрдмрд░рд╛рдУ рдордд, рдРрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП! - рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдирдпрд╛ рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ, рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ
adb forward tcp:5039 tcp:5039
- рдЙрд╕реА рдХрдВрд╕реЛрд▓ рдореЗрдВ, Android NDK рд╕реЗ gdb рдЪрд▓рд╛рдПрдБ:
gdb libMyNativeLibrary.so
рдЬрд╣рд╛рдБ libMyNativeLibrary.so
рд╕рдорд╛рди .so рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреЗ libMyNativeLibrary.so
рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ gdb рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдЪрд╛рд▓реВ рд╣реИред рдпрд╣ gdb рдХрдВрд╕реЛрд▓ рдХреЛ рдЦреЛрд▓реЗрдЧрд╛ред - Gdb рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЯрд╛рдЗрдк рдХрд░реЗрдВ:
(gdb) target remote :5039
рдЗрди рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рдорд╛рди
Remote debugging using :5039 0x4009d58c in ?? ()
рдФрд░ рдПрдбреАрдмреА рдХрдВрд╕реЛрд▓ рдореЗрдВ (рдпрд╣ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд╕рд╛рде рдЦреБрд▓рд╛ рд╣реИ, рдпрд╛рдж рд╣реИ?) рдХреБрдЫ рдкрд╕рдВрдж рд╣реИ
Remote debugging from host 127.0.0.1
- рдЬреАрдбреАрдмреА рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ
(gdb) info functions
рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рд╕реВрдЪреА рдореЗрдВ рдЬреЗрдПрдирдЖрдИ рдХреЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
0x5b5f7bac Java_my_app_for_debug_MainActivity_coolNativeMethod 0x5b5f7c0c Java_my_app_for_debug_MainActivity_anotherCoolNativeMethod 0x5b5f7c1c Java_my_app_for_debug_MainActivity_theCoolestNativeMethodEver
- рдЬреАрдбреАрдмреА рдХрдВрд╕реЛрд▓ рдореЗрдВ, рдЬреЗрдПрдирдЖрдИ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдкрддреЗ рдкрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдбрд╛рд▓реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╣реИ
(gdb) break *0x5b5f7bac (gdb) break *0x5b5f7c0c (gdb) break *0x5b5f7c1c
- Gdb рдХрдВрд╕реЛрд▓ рдореЗрдВ
c
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдиреЗрдЯрдмреАрдиреНрд╕ рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ "рдлреНрд░реАрдЬ" рд╣реЛ рдЬрд╛рдПрдЧреА рдФрд░ рдЖрдк рдлрд┐рд░ рд╕реЗ рдбрд╛рд▓рд╡рд┐рдХ рдмрд╛рдпреЛрдЯреЗрдХ рдХреЛ рдбреАрдмрдЧ рдХрд░ рдкрд╛рдПрдВрдЧреЗред
рдЕрдм, рд╣рд░ рдмрд╛рд░ рдПрдХ Dalvik bytecode рдХреА рддрд░рд╣ рдПрдХ рджреЗрд╢реА рд╡рд┐рдзрд┐ рдХреЙрд▓
const/high16 v8, 0x4100 invoke-static {v8}, Lmy/app/for/debug/MainActivity;->theCoolestNativeMethodEver(F)V
NetBeans рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдлреНрд░реАрдЬ рд╣реЛ рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди gdb рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рддрд░рд╣ рдЦреБрд╢ рдХрд░ рджреЗрдЧрд╛
Breakpoint 1, 0x5b5f7c1c in Java_my_app_for_debug_MainActivity_theCoolestNativeMethodEver () from libMyNativeLibrary.so
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╣реИред рдлрд┐рд░
x/i $pc
,
stepi
- рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдПрдЖрд░рдПрдо рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЖрдЧреЗ рдбреАрдмрдЧ рдХрд░реЗрдВ (рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдПрдЖрд░рдПрдо рдХреЛрдбрд╛рдВрддрд░рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? - рдЕрдЪреНрдЫрд╛ ...)
рдиреБрдХрд╕рд╛рди
рдУрд╣, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реИрдВред рдЧрдбреНрдвреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдмрдЧреАрдЪрд╛ред рдпрд╣рд╛рдБ рдЬреАрдПрдирдпреВ рдЬреАрдбреАрдмреА (рдЬреАрдбреАрдмреА) 7.4.1 рдХреЗ рд╕рд╛рде рдЬреАрдПрдирдпреВ рдЬреАрдбреАрдмреАрд╕рд░реНрд╡рд░ (рдЬреАрдбреАрдмреА) 7.4.1 рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб 4.0.3 рдкрд░ рдРрдиреЛрд▓ рдСрд░реЛрд░рд╛ рдбрд┐рд╡рд╛рдЗрд╕ (
рдПрдХ рдкреБрд░рд╛рдирд╛ ) рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдпрд╛рджрдЧрд╛рд░ рдЧреНрд▓рд┐рдЪ рд╣реИрдВред
- рдЕрдЧрд░ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдЖрдкрдиреЗ gdb рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╡реЙрдЪрдбреЙрдЧ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ gdbserver рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ gdb
set watchdog 18000
рдЪрд▓рд╛рдПрдВ - рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред - рдХрднреА-рдХрднреА,
info functions
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, info functions
рдХреА рд╕реВрдЪреА рдореЗрдореЛрд░реА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди .so рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдСрдлрд╝рд╕реЗрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
0x000c0bac Java_my_app_for_debug_MainActivity_coolNativeMethod 0x000c0c0c Java_my_app_for_debug_MainActivity_anotherCoolNativeMethod 0x000c0c1c Java_my_app_for_debug_MainActivity_theCoolestNativeMethodEver
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ libMyNativeLibrary.so
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдЬреЛ gdb рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдЪрд╛рд▓реВ рд╣реИ, рдФрд░ gdb рдХреЛ рдЙрд╕реА gdb libMyNativeLibrary.so
рдХрдорд╛рдВрдб gdb libMyNativeLibrary.so
рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред - рдХрднреА-рдХрднреА,
info functions
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, info functions
рдХреА рд╕реВрдЪреА рд╕реНрдореГрддрд┐ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдХреЛ .so рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП:
0x5b5f7bac Java_my_app_for_debug_MainActivity_coolNativeMethod 0x5b5f7c0c Java_my_app_for_debug_MainActivity_anotherCoolNativeMethod 0x5b5f7c1c Java_my_app_for_debug_MainActivity_theCoolestNativeMethodEver 0x000c0bac Java_my_app_for_debug_MainActivity_coolNativeMethod 0x000c0c0c Java_my_app_for_debug_MainActivity_anotherCoolNativeMethod 0x000c0c1c Java_my_app_for_debug_MainActivity_theCoolestNativeMethodEver
.So рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдСрдлрд╝рд╕реЗрдЯреНрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ, рдореЗрдореЛрд░реА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдкрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд▓рдЧрд╛рдПрдВред - рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдкрд░
break
рдХрдорд╛рдВрдб рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ ... рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдкрд░ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд▓рдЧрд╛рдПред set stop-on-solib-events
рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ- рд╕рдордп-рд╕рдордп рдкрд░ рдЖрдк
Cannot access memory at address 0x1
ред рдЗрд╕реЗ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░реЗрдВред
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ glitches рдХреА рдкреВрд░реА рд╕реВрдЪреА рд╕реЗ рджреВрд░ рд╣реИ рдЬреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рджреЗрд╢реА рддрд░реАрдХреЛрдВ рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдЕрдиреНрдп рд╢реЛрдзрдХрд░реНрддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ, рдЕрдиреВрдареЗ рдЧреНрд▓рд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗ рдЬреЛ рдХрд┐ рдореИрдВ рднрд░ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реВрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдорд┐рд▓ рдЬрд╛рдП - рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рднреА, рдХреГрдкрдпрд╛ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ рдФрд░ / рдпрд╛ рдкрд╛рда рдореЗрдВ рддрдХрдиреАрдХреА рд╕рдВрд╢реЛрдзрди рдХрд░реЗрдВред рдореИрдВ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдмреЗрд╡рдХреВрдл рд╣реВрдВ, рддреЛ рдХреГрдкрдпрд╛ рдзреИрд░реНрдп рд░рдЦреЗрдВред рдореИрдВ рд╕рднреА рдХреЛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдЦреБрд╢ рдбрд┐рдмрдЧрд┐рдВрдЧ!
PS рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз, рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдкреАрдкреАрдПрд╕ рд▓реЗрдЦ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рдЪрд▓рд╛ рдЧрдпрд╛ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЛ рдЙрд▓рдЯрдиреЗ рдХрд╛ рд╡рд┐рд╖рдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рдЖрдЧреЗ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реЗрдЦ рдХреА рд╕рд╣рдорддрд┐ рдХреНрдпрд╛ рдереА, рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ - рдУрд╣ рдареАрдХ рд╣реИ, рдЪрд▓рд┐рдП рд╣рдордмреНрд░рд╢рд┐рд▓рд╛ рдХреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдкреАрдкреАрдкреАрдПрд╕ рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рд▓реЗрдЦ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреГрдкрдпрд╛ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ, рдореИрдВ рдХреНрдпрд╛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред