Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.93 KB | None | 0 0
  1. # gdbの使い方まとめ
  2. gdbのコマンドは、一意に決まるところまで省略できる
  3. - 起動
  4. ```
  5. $gdb <file>
  6. $gdb -p <pid>
  7. ```
  8.  
  9. - 実行
  10. - 引数を与えたり、リダイレクトしたりもできる
  11. - startで実行するとmain関数に入るときにブレークする
  12. ```
  13. gdb$ r
  14. gdb$ start
  15. ```
  16. 非省略形: run
  17.  
  18.  
  19. - 引数をあらかじめセットする
  20. ```
  21. gdb$ set args <コマンドライン引数>...
  22. ```
  23.  
  24.  
  25. - 終了する
  26. ```
  27. gdb$ q
  28. ```
  29. 非省略形: run
  30.  
  31.  
  32. - 実行中のプログラムを止める
  33. ```
  34. gdb$ k
  35. ```
  36. 非省略形: kill
  37.  
  38.  
  39. - アセンブル言語の記法の変更
  40. ```
  41. gdb$ set disassembly-flavor (intel/att)
  42. ```
  43.  
  44.  
  45. - 逆アセンブル
  46. - ここのアドレスには*はつけないが、他のアドレスの表記には先頭に*をつける
  47. ```
  48. gdb$ disas <関数名/アドレス>
  49. gdb-peda$ pdisas <関数名/アドレス>
  50. gdb-peda$ pdisas <開始アドレス> <終了アドレス>
  51. ```
  52. 非省略形: disassemble
  53.  
  54.  
  55. - ブレークポイントの設置
  56. - シンボル情報があれば引数に行数を与えることもできる
  57. - 引数を与えなければ今pcが指しているアドレスにブレークポイントを設置する
  58. ```
  59. gdb$ b <関数名/アドレス>
  60. ```
  61. 非省略形: break
  62.  
  63.  
  64. - 設置したブレークポイントの確認
  65. ```
  66. gdb$ i b
  67. ```
  68. 非省略形: info break
  69.  
  70.  
  71. - ブレークポイントの削除
  72. - 引数がないと全てのブレークポイントを消す
  73. ```
  74. gdb$ d <ブレークポイントの番号>
  75. ```
  76. 非省略形: delete
  77.  
  78.  
  79. - ブレークポイントの無効化、有効化
  80. ```
  81. gdb$ disable <ブレークポイントの番号>
  82. gdb$ enable <ブレークポイントの番号>
  83. gdb$ ignore <ブレークポイントの番号> <無視する回数>
  84. ```
  85.  
  86.  
  87. - ステップオーバー
  88. - 繰り返し回数だけステップオーバーを実行する
  89. - callなどのサブルーチンの中まで入り込まない
  90. - nは1関数を1ステップ、niは1アセンブリコードを1ステップと扱う
  91. ```
  92. gdb$ n <繰り返し回数>
  93. gdb$ ni <繰り返し回数>
  94. ```
  95. 非省略形: next, nexti
  96.  
  97.  
  98. - ステップイン
  99. - 繰り返し回数だけステップオーバーを実行する
  100. - callなどのサブルーチンの中まで入り込まない
  101. - sは1関数を1ステップ、siは1アセンブリコードを1ステップと扱う
  102. ```
  103. gdb$ s <繰り返し回数>
  104. gdb$ si <繰り返し回数>
  105. ```
  106. 非省略形: stepi
  107.  
  108.  
  109. - 実行を再開する
  110. ```
  111. gdb$ c
  112. ```
  113. 非省略形: continue
  114.  
  115.  
  116. - 次のcallまで実行する
  117. ```
  118. gdb-peda$ nextcall
  119. ```
  120. 非省略形: next, nexti
  121.  
  122.  
  123. - 格納された値をみる
  124. ```
  125. gdb$ p <変数/レジスタ/アドレス/式>
  126. ```
  127. 非省略形: print
  128.  
  129.  
  130. - アドレスやレジスタの詳しい情報をみる
  131. ```
  132. gdb-peda$ xi <変数/レジスタ/アドレス>
  133. ```
  134. 非省略形: xinfo
  135.  
  136. - 全てのレジスタの値をみる
  137. ```
  138. gdb$ i r
  139. ```
  140. 非省略形: info registers
  141.  
  142.  
  143. - 条件を満たしたときにブレークする
  144. - 変数/アドレスを指定すると、値が変動するとブレークする
  145. ```
  146. gdb$ watch <変数/アドレス>
  147. gdb$ watch <条件式>
  148. ```
  149.  
  150.  
  151. - 変数や式の型をみる
  152. ```
  153. gdb$ what <式>
  154. ```
  155. 非省略形: whatis
  156.  
  157.  
  158. - 読み込みを検出してブレークする
  159. ```
  160. gdb$ rw <変数/アドレス>
  161. ```
  162. 非省略形: rwatch
  163.  
  164.  
  165. - 読み書き込みを検出してブレークする
  166. ```
  167. gdb$ aw <変数/アドレス>
  168. ```
  169. 非省略形: awatch
  170.  
  171.  
  172. - 値を書き換える
  173. - pcを書き換えて無理矢理制御を移すこともできる
  174. ```
  175. gdb$ set <変数/アドレス/レジスタ>=<値>
  176. ```
  177.  
  178.  
  179. - メモリの内容を表示する
  180. - 表示する数は数字
  181. - フォーマットはbhwgのどれか(byte, halfword, word, giantword)
  182. - フォーマットはsixのどれか(文字列, 命令, 16進数)
  183. ```
  184. gdb$ x/<表示する数><メモリサイズ><表示フォーマット> <先頭アドレス>
  185. ```
  186.  
  187. 例:
  188. ```
  189. gdb$ x/10i 0x114514
  190. ```
  191.  
  192. - スタックの内容を表示する
  193. ```
  194. gdb$ stack
  195. gdb-peda$ tel <長さ>
  196. ```
  197. 非省略形: telescope
  198.  
  199. 例:
  200. ```
  201. gdb$ x/10i 0x114514
  202. ```
  203.  
  204.  
  205. - セグフォしたとき
  206. - そのとき実行していた関数が分かる
  207. ```
  208. gdb$ i s
  209. ```
  210. 非省略形: info stack
  211.  
  212.  
  213. - コールスタックのバックトレースをする
  214. ```
  215. gdb$ bt
  216. ```
  217. 非省略形: backtrace
  218.  
  219.  
  220. - 分からないことがある
  221. ```
  222. gdb$ h <コマンド名>
  223. ```
  224. 非省略形: help
  225.  
  226.  
  227. ## セキュリティ系拡張
  228. - ASLRの有無を確認
  229. ```
  230. gdb-peda$ aslr
  231. ```
  232.  
  233.  
  234. - セキュリティ機構の有無の確認
  235. ```
  236. gdb-peda$ checksec
  237. ```
  238.  
  239.  
  240. - ROPgadgetを探す
  241. ```
  242. gdb-peda$ droprop
  243. ```
  244.  
  245.  
  246. - ヘッダ情報の取得
  247. ```
  248. gdb-peda$ elfheader
  249. gdb-peda$ readelf
  250. ```
  251.  
  252.  
  253. - マッピングされたアドレスの情報を表示する
  254. ```
  255. gdb-peda$ vmmap
  256. ```
  257.  
  258.  
  259. - 文字列を扱う
  260. - 長さnの文字列を生成する
  261. - 長さnの文字列を引数に与える
  262. - 生成した文字列の何文字目に与えた文字列があるか探索する
  263. ```
  264. gdb-peda$ pattern create n
  265. gdb-peda$ pattern arg n
  266. gdb-peda$ pattern offset <文字列>
  267. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement