DTrace:如何打印内存缓冲区

时间:2010-08-09 06:56:32

标签: dtrace

我需要跟踪对某个特定文件执行的所有pwrite(2)调用,并打印所有要逐字节写入的缓冲区。预期的数据不是ASCII字符串格式,所以我不能使用:

printf("%s\n", copyinstr(arg1))

我了解了copyin(arg1,arg2),但是这给了我一个空白*我发现的所有例子都通过调用stringof将它转换为字符串,例如:

printf("%s\n", stringof(copyin(arg1, arg2)))

我需要的是以某种方式显示copyin'ed缓冲区中的所有字节。有什么建议吗?

谢谢你, 因索。

2 个答案:

答案 0 :(得分:1)

好的,这是通过tracemem(buffer, size)电话完成的。

答案 1 :(得分:1)

tracemem(address, size_t nbytes, size_t dbytes),其中nbytes是常数,而dbytes是动态的,并且小于nbytes。

tracemem

void tracemem(address, size_t nbytes)
void tracemem(address, size_t nbytes, size_t dbytes)

tracemem操作将D表达式作为其第一个参数,     地址,其常量为第二个参数nbytes。微量元素     将内存从addr指定的地址复制到有向     缓冲区的长度为nbytes。

如果提供第三个参数dbytes,则最多只能为dbytes     复制。 dbytes可以是可变数量,但必须小于     大于等于nbytes。这在您查看时很有用     具有已知上限的东西,但是实际的字节数     可能会有所不同。例如,考虑您要转储     以太网数据包。最大大小基于MTU,但     给定数据包中的数据量是可变的。