1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

リモート(lldb)でiPhone端末に接続してデバッグすることはできるか

Last updated at Posted at 2021-12-18

ある日浮かんだアイディア

LLDBのマニュアルにはRemote Debuggingについて説明している部分があります。
スクリーンショット 2021-12-18 18.03.43.png
そして最近ish shella-shellなど、iPhoneデバイス上でjailbreakしなくても「コマンド実行環境」を簡単に用意できるようになっていることから

もしかしたらリモートでiPhone端末に接続してデバッグすることができるかもしれない

と思いました。ここで「セキュリティー的にそんなことが出来るわけがない」と思った方もいるでしょう。この記事を書いている自分もそう思いましたが直接やってみて確認したかったので、検証してみました。
結論を先にお伝えしますと

予想通りjailbreakしないとできません

lldbはリモートデバッグ機能を提供していますが「iOSのセキュリティー・権限」の問題をjailbreakなしでは解決できないので、iPhone端末で動いているアプリのプロセスにAttachすることができません。(そもそもAttach以前にアクセスすらできない)

ここからは検証の手順と流れを共有します。

iphone端末側

①iPhone端末にdebugserverのバイナリをcopyする
※バイナリのパス(MacOS 12.0.1)
/Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/Resources/debugserver
②ターゲットのプロセスを起動する(デバッグ対象)
debugserverでip,port, Attach対象を指定して実行する(Attach対象は②で起動したプロセス)```
$debugserver ip:port --attach=[ターゲット]

##### mac側
④lldbを実行する```
$lldb
```⑤platformのプラグインを指定する```
(lldb) platform select remote-ios```
⑥iPhone端末側のデバッグサーバにアクセスする```
(lldb) process connect connect://[iPhoneのIP]:[③で指定したポート]

問題と解決

(解決)iPhone端末のコマンド実行環境
→今回はiSH ShellというiPhone向けアプリをインストールして使いました。

(解決)iPhone端末で実行可能なdebugserverバイナリを用意する
→Universalバイナリをlipoを使って対象の端末アーキテクチャに合わせました(arm64e)

(解決)debugserverのバイナリをiPhone端末にCopyして、コマンドでアクセスできるようにする
→こちらはiSH ShellのFile Brawsing機能とiPhoneの「File」アプリで解決しました。

(★未解決)用意したコマンド実行環境からiPhone端末で実行中のプロセスにアクセスする
→これが解決できないとそもそもデバッグ対象のプロセスにlldbからAttachができないので、どうしようもなかったです。
(jailbreakをすればroot権限の問題やアクセス範囲の課題も解決できます)

まとめ

lldbを利用したリモードデバッグはiPhone端末ではjailbreakなしでは難しいです。
ただMac-to-Macでのリモートデバッグは可能ですので興味のある方はチャレンジしてみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?