建立一个小程序ttt.lsp 内容如下: (defun C:TTT() (SETQ A 8)(PRINC "TTT")) (defun C:AAA() (PRINC "AA")) (defun C:ccc() (PRINC "c"))
用(load "ttt.lsp")加载
执行命令 !c:ttt 显示#<SUBR @10bebc44 C:TTT>
查看0x10bebc44这个内存地址,内容如下: 10BEBC44:04 62 93 10 00 00 00 00 50 8B BF 0F 44 D2 AA 10 00 00 00 00
查看这张表的第四项是0x10AAD244
10AAD244:F0 43 93 10 00 00 00 00 00 85 B2 10 2A 00 00 00 05 00 00 00
查看这张表的第三项是0x10B28500,第五项是05
10B28500 18 EE C1 0F 00 00 00 00 68 8B BF 0F 68 21 C0 0F
10B28510 F8 28 AF 10 17 01 00 32 08 0B 06 02 00 0A 09 03
10B28520 00 09 04 00 34 01 03 21 00
C:TTT函数的开始地址是: 0x10B28500+5*4=0x10B28514
查看0x10B28514这个地址的内容:
10B28514:17 01 00 32 08 0B 06 02 00 0A 09 03 00 09 04 00 34 01 03 21 00
32 08 0B 06 02 00 0A就是(SETQ A 8)
09 03 00 09 04 00 34 01 03 21 00就是(PRINC "TTT")
再试验一个,!c:aaa
#<SUBR @10bebc6c C:AAA>
第一张表 10BEBC6C:04 62 93 10 00 00 00 00 B0 8B BF 0F 6C D2 AA 10 00 00 00 00
第二张表 10AAD26C: F0 43 93 10 00 00 00 00 00 FA AD 10 1F 00 00 00 04 00 00 00
函数开始地址:0x10adfa00+4*4=0x10adfa10
10ADFA00 68 D2 C1 0F 00 00 00 00 A8 21 C0 0F F8 28 AF 10 10ADFA10 17 01 00 09 02 00 09 03 00 34 01 03 21 00
看来函数的代码都是17开头的
09 02 00 09 03 00 34 01 03 21 00是(PRINC "AA")