システムコールを逆アセンブルして、アセンブリ命令を得ることができますシステムコールを解体する方法は?
答えて
このようなことができます。私は "DUP" の組立・ダンプを取得したいと言う:
#include <stdio.h>
#include <sys/file.h>
int main() {
return dup(0)
}
それをコンパイルします:
gcc -o systest -g3 -O0 systest.c
はそれをダンプします。
objdump -d systest
はで見ると、「この
書き込みメイン "参照:
400478: 55 push %rbp
400479: 48 89 e5 mov %rsp,%rbp
40047c: bf 00 00 00 00 mov $0x0,%edi
400481: b8 00 00 00 00 mov $0x0,%eax
400486: e8 1d ff ff ff callq 4003a8 <[email protected]>
40048b: c9 leaveq
40048c: c3 retq
40048d: 90 nop
40048e: 90 nop
40048f: 90 nop
だから私が見る「DUPの@ PLT」を見て:
00000000004003a8 <[email protected]>:
4003a8: ff 25 7a 04 20 00 jmpq *2098298(%rip) # 600828 <_GLOBAL_OFFSET_TABLE_+0x20>
4003ae: 68 01 00 00 00 pushq $0x1
4003b3: e9 d0 ff ff ff jmpq 400388 <_init+0x18>
だから、私は、すべてのシステムコールのベクトルを持っていると仮定ことになる、「グローバルオフセットテーブル」に電話を作っています。他の記事と同様に、カーネルソース(または標準のライブラリソース?)を参照してください。
私はあなたがこれをやりたいとは思わないです。システムコール処理は複雑です(http://www.ibm.com/developerworks/linux/library/l-system-calls/参照)。この質問に「linux」というタグが付いているので、ソースコードはkernel.orgからダウンロードできます(これはアセンブリコードよりもはるかに理解しやすくなります)。
確かに、システムコールの実装はコードによって理解できます。 – shingaridavesh
Linuxシステムコールを理解するには、コードを参照してください。
重要なファイルは、次のとおりです。
/include/linux/syscalls.h(サポートされているすべてのシステムがLinuxで呼び出す)
/arch/arm/kernel/entry-common.S(レジスタ・レベルでシステム・コールの実装)
/arch/arm/kernel/calls.S(システムコール番号)
/arch/arm/include/asm/unistd.h(システムCのアドレスすべての)
注:システムコールテーブルは、のみのみsystem.mapから対処することができます。
- 1. モカモックを解体する方法は?
- 2. Javaでシステムコールをキャッチする方法は?
- 3. UINavigationController全体を解放する方法
- 4. カーネルスペースで別のシステムコールからシステムコールを作る方法
- 5. システムコールを逆アセンブルする方法
- 6. ルートデバイスではなくアンドロイドのシステムコールをトレースする方法は?
- 7. SoapClientから構造体を解析する方法 - > __ getTypes()?
- 8. EINTR(中断されたシステムコール)を処理する方法
- 9. Linuxカーネルでタスクのシステムコールの時間を制限する方法
- 10. Linuxカーネルを再コンパイルせずに自分のシステムコールを実装する方法は?
- 11. Cでfork()システムコールの実行時間を計算する方法は?
- 12. 私の流星の方法を単体テストする方法は?
- 13. 構造体を「調べる」方法は?
- 14. select()システムコールはブロック解除されません
- 15. shared_ptrを解放しない構造体へのポインタで使用する方法
- 16. io.ReadCloserを解凍する方法は?
- 17. gitブランチを解凍する方法は?
- 18. XAMLファイルを解析する方法は?
- 19. コミットを解除する方法は?
- 20. time.time()を解析する方法は?
- 21. asprintf():ポインタを解放する方法は?
- 22. ModalViewControllerAnimatedを解除する方法:はい
- 23. は、具体的な方法
- 24. システムコールの番号は
- 25. より具体的なXML解析方法
- 26. nhibernate:集合体をマップする方法
- 27. Uninstaller.exe自体を削除する方法
- 28. オブジェクト自体を破壊する方法
- 29. 組立解体
- 30. テキストを後方にイタリック体にする方法は?
PLTとGOTは動的リンカー構造です。 PLTまたはプロシージャのリンクテーブルには、動的関数への間接ジャンプ(GOTによる)と 'dl_runtime_resolve()へのフォールバックジャンプが含まれています。 GOT(グローバルオフセットテーブル)には、既に解決された機能のアドレス、または間接ジャンプに続くPLTの命令が含まれているため、フォールバックジャンプにリダイレクトすることができます。 – ninjalj