Skip to content

Commit 515b410

Browse files
committed
feat: add ability to dyld disass at a given vmaddr
1 parent 0031773 commit 515b410

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

cmd/ipsw/cmd/dyld_disass.go

+14-8
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func init() {
4141
dyldCmd.AddCommand(dyldDisassCmd)
4242

4343
// dyldDisassCmd.Flags().StringP("symbol", "s", "", "Function to disassemble")
44-
// dyldDisassCmd.Flags().Uint64P("vaddr", "a", 0, "Virtual address to start disassembling")
44+
dyldDisassCmd.Flags().Uint64P("vaddr", "a", 0, "Virtual address to start disassembling")
4545
dyldDisassCmd.Flags().Uint64P("count", "c", 0, "Number of instructions to disassemble")
4646
dyldDisassCmd.Flags().BoolVarP(&demangleFlag, "demangle", "d", false, "Demandle symbol names")
4747
// dyldDisassCmd.Flags().StringP("sym-file", "s", "", "Companion symbol map file")
@@ -54,7 +54,7 @@ func init() {
5454
var dyldDisassCmd = &cobra.Command{
5555
Use: "disass",
5656
Short: "🚧 [WIP] Disassemble dyld_shared_cache symbol in an image",
57-
Args: cobra.MinimumNArgs(2),
57+
Args: cobra.MinimumNArgs(1),
5858
RunE: func(cmd *cobra.Command, args []string) error {
5959

6060
var data []byte
@@ -65,7 +65,7 @@ var dyldDisassCmd = &cobra.Command{
6565

6666
imageName, _ := cmd.Flags().GetString("image")
6767
instructions, _ := cmd.Flags().GetUint64("count")
68-
68+
startVMAddr, _ := cmd.Flags().GetUint64("vaddr")
6969
// symbolName, _ := cmd.Flags().GetString("symbol")
7070
// doDemangle, _ := cmd.Flags().GetBool("demangle")
7171

@@ -147,11 +147,17 @@ var dyldDisassCmd = &cobra.Command{
147147
a2sFile.Close()
148148
}
149149

150-
if len(args) > 1 {
151-
log.Info("Locating symbol: " + args[1])
152-
symAddr, image, err := f.GetSymbolAddress(args[1], imageName)
153-
if err != nil {
154-
return err
150+
if len(args) > 1 || startVMAddr > 0 {
151+
var symAddr uint64
152+
var image *dyld.CacheImage
153+
if len(args) > 1 {
154+
log.Info("Locating symbol: " + args[1])
155+
symAddr, image, err = f.GetSymbolAddress(args[1], imageName)
156+
if err != nil {
157+
return err
158+
}
159+
} else {
160+
symAddr = startVMAddr
155161
}
156162

157163
off, _ := f.GetOffset(symAddr)

0 commit comments

Comments
 (0)