内部函数_byte@读内存
写内存就是_byte@<-,但是这两个函数有个局限性,系统部分没办法读写。 _$ (_addr-of car)59290240
_$
(defun AYL-read-memory (PEntry Offset Number / CodLst)
(setq CodLst nil)
(setq PEntry (+ PEntry Offset))
(while (> Number 0)
(setq CodLst (cons (_byte@ PEntry) CodLst))
(setq PEntry (1+ PEntry))
(setq Number (1- Number))
)
(reverse CodLst)
)
_$ (AYL-READ-MEMORY 59290240 0 32)
(64 57 87 96 0 0 0 0 192 81 114 3 128 113 80 96 1 0 0 0 64 57 87 96 0 0 0 0 152 110 114 3)
_$ 本帖最后由 baitang36 于 2022-8-4 20:49 编辑
nzl1116 发表于 2022-8-3 21:26
总不能随便给个指针去读内存,象无头苍蝇一样去猜,那毫无意义,再提供一个数据在内存中的数据块_addr-of
其实不需要_addr-of,直接(_byte@ car)读出来的结果一样。
【原创】按实现方法给autolisp函数分类 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
这个帖子的函数类型就是用类似(_byte@ car)这样的方法读出来的。200类型的函数,就是这么来的。
64位版本CAD2018测试
_$ (syz-_addr-of car)
1237819328
_$ (AYL-READ-MEMORY (syz-_addr-of car) 0 32)
(72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72)
_$ (AYL-READ-MEMORY 00001237819328 0 32)
(72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72)
_$ (syz-_byte@ car)
168
_$ 本帖最后由 nzl1116 于 2022-8-3 20:40 编辑
还有_word@和_word@<-
_ptr@和_ptr@<- 总不能随便给个指针去读内存,象无头苍蝇一样去猜,那毫无意义,再提供一个数据在内存中的数据块_addr-of 希望能看到应用实例
希望能看到应用实例 +1 这些是系统内部函数吗? 都是大佬跟着学习 本帖最后由 baitang36 于 2022-8-5 07:53 编辑
楼主如果能解释一下从内存中读出来的数据的含义就更好了。
(64 57 87 96 0 0 0 0 192 81 114 3 128 113 80 96 1 0 0 0)
我研究了好久,才能明白这第一个字节是表示函数的类型。64 是函数类型,不同版本不同,但同一类函数是相同的。我用acad2008试验,这里是200。
页:
[1]
2