nzl1116 发表于 2022-8-3 20:33:37

内部函数_byte@读内存

写内存就是_byte@<-,但是这两个函数有个局限性,系统部分没办法读写。

nzl1116 发表于 2022-8-4 12:12:08

_$ (_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:44:31

本帖最后由 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类型的函数,就是这么来的。

Dani1988 发表于 2022-8-8 10:00:36

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:38:30

本帖最后由 nzl1116 于 2022-8-3 20:40 编辑

还有_word@和_word@<-
_ptr@和_ptr@<-

nzl1116 发表于 2022-8-3 21:26:05

总不能随便给个指针去读内存,象无头苍蝇一样去猜,那毫无意义,再提供一个数据在内存中的数据块_addr-of

陨落 发表于 2022-8-4 09:12:48

希望能看到应用实例

雨的节奏 发表于 2022-8-4 10:40:08


希望能看到应用实例 +1

liuyj 发表于 2022-8-4 15:16:03

这些是系统内部函数吗?

linzenghuo 发表于 2022-8-4 22:58:25

都是大佬跟着学习

baitang36 发表于 2022-8-5 07:49:06

本帖最后由 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
查看完整版本: 内部函数_byte@读内存