For example, I'm writing code in assembly A, and the method I want to call is in assembly B at 0x06000DF2. Here is the hex dnSpy create for me 6F8701000A, but I don't know how it's calculated. Please explain to me. Thank you!
答案 0 :(得分:2)
第一个字节(6F
)表示它是callvirt指令,剩下的4个字节是方法little endian字节顺序的元数据标记。
callvirt 0x0A000187
元数据标记是对当前模块(包含IL的模块)的元数据中特定表中的特定行的引用。高位字节表示令牌的类型(因此,查看哪个元数据表),而剩余的3个字节表示表中的行号。 0x0A
表示目标行位于MemberRef
表中,引用的记录将提供查找正确成员所需的详细信息。
在ECMA-335分区II,第22.25节中描述了MemberRef表。