5
また、私は実行中のプロセスのmach-ouuidを取得する方法は? Mac上でUUIDを取得する
は、iOSデバイス上のクラッシュせずにUUIDを取得する方法は「バイナリイメージ」セクションに簡単なクラッシュ でUUIDを取得することができます
dwarfdump -u path/to/compile/executable
を使用することができますか?
また、私は実行中のプロセスのmach-ouuidを取得する方法は? Mac上でUUIDを取得する
は、iOSデバイス上のクラッシュせずにUUIDを取得する方法は「バイナリイメージ」セクションに簡単なクラッシュ でUUIDを取得することができます
dwarfdump -u path/to/compile/executable
を使用することができますか?
実行可能ファイル(mach-oファイル)UUIDは、リンカーld
によって作成され、LC_UUID
という名前のロードコマンドに格納されます。あなたはotool
を使用してマッハ-Oファイルのすべてのロードコマンドを見ることができます。
otool -l path_to_executable
> ...
> Load command 8
> cmd LC_UUID
> cmdsize 24
> uuid 3AB82BF6-8F53-39A0-BE2D-D5AEA84D8BA6
> ...
すべてのプロセスは_mh_execute_header
という名前のグローバルシンボルを使用して、そのマッハ-Oヘッダにアクセスすることができます。このシンボルを使用すると、loadコマンドを繰り返してLC_UUID
を検索することができます。コマンドのペイロードはUUIDです。
#import <mach-o/ldsyms.h>
NSString *executableUUID()
{
const uint8_t *command = (const uint8_t *)(&_mh_execute_header + 1);
for (uint32_t idx = 0; idx < _mh_execute_header.ncmds; ++idx) {
if (((const struct load_command *)command)->cmd == LC_UUID) {
command += sizeof(struct load_command);
return [NSString stringWithFormat:@"%02X%02X%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X%02X%02X%02X%02X",
command[0], command[1], command[2], command[3],
command[4], command[5],
command[6], command[7],
command[8], command[9],
command[10], command[11], command[12], command[13], command[14], command[15]];
} else {
command += ((const struct load_command *)command)->cmdsize;
}
}
return nil;
}