ASM 使用代碼查找偏移量 (ASM find offset with code)


問題描述

ASM 使用代碼查找偏移量 (ASM find offset with code)

I would like to find the offsets of different methods in test cases I work with. I can find where methods start and end, I look for opcodes RETURN and ARETURN (Im doing so in a class that extends a methodVisitor in the method visitInsn()), but I have not been able to find the offset where those happen in the bytecode. Any ideas?

Just in case: I am working with the core API of ASM, I am aware that the tree API could help me find what I need, but the tree API makes everything go slow and use memory and I can not afford any of those, so I work with the core API


參考解法

方法 1:

I found a way to get the offsets per instruction, it is not a common way but it works for me. ASM does not give you the offset per instruction because usually you wont need it, but you can still get it, I had to modify classes within ASM to make my idea work.

I modified the Label class and the ClassReader class, in the second one, there is a part that creates and adds labels to the labels array only in special occasions, so I just told it to add a label per instruction, then I just call the getOffset inside a visitInsn inside a methodVisitor and, the label will be resolved and have the offset.

(by lesolorzanovlesolorzanov)

參考文件

  1. ASM find offset with code (CC BY-SA 3.0/4.0)

#offset #java #assembly #bytecode






相關問題

ASM 使用代碼查找偏移量 (ASM find offset with code)

沒有在偏移量 0 處映射 Win32 便攜式可執行文件的可能原因是什麼? (What are possible reasons for not mapping Win32 Portable Executable images at offset 0?)

Адлюстраванне тоста з зададзеным зрушэннем (Displaying toast at a given offset)

c - 刪除前 4 個字節的數據 (c - remove first 4 bytes of data)

PCM 樣本位置 [字節偏移] 在 flac (PCM sample position [byte offset] in flac)

到達 (window).scroll 上的中間元素 (Reach middle element on (window).scroll)

插入新元素時“LIMIT OFFSET”是否穩定? (Is 'LIMIT OFFSET' stable when new element inserted?)

如何從包含 Oracle 中時區偏移的日期/時間字符串中獲取 UTC 日期/時間 (How to get UTC date/time from a date/time string that contains timezone offset in Oracle)

嚴重性:警告消息:非法字符串偏移 'id' MY OWN PROJECT (Severity: Warning Message: Illegal string offset 'id' MY OWN PROJECT)

jquery 獲取和設置文檔偏移量(或位置?) (jquery get and set document offset (or position?))

在地址位移內還是在地址位移外相乘更有效? (Is it more efficient to multiply within the address displacement or outside it?)

如何在裝配中進行十六進制偏移計算 (how to do hex offset calculation in assembly)







留言討論