Chinaunix首页 | 论坛 | 博客
  • 博客访问: 58498
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-26 15:04
文章分类

全部博文(13)

文章存档

2015年(13)

我的朋友

分类: Android平台

2015-05-21 12:25:25

  每次print一个表的时候,都输出table的“地址”,像0x5bce10这样。不禁猜测这个地址的意义?是表示这个table在进程空间的地址吗?
  我决定打印出进程空间0x5bce10处的内存。
  方法是用c写一个函数:

点击(此处)折叠或打开

  1. int c_view_mem(lua_State *L){
  2.         int addr = lua_tointeger(L, -2);
  3.         int n = lua_tointeger(L, -1);
  4.         printf("addr:%x, n:%d\n", addr, n);
  5.         int i = 0;
  6.         for(i = 0; i < n; i++){
  7.                 printf("%d ", ((int *)(addr))[i]);
  8.         }
  9.         return 0;
  10. }
  编译成dll,在lua里交互测试。下面是测试的记录,直接复制下来,备忘。
  反正得出的结论是:
1,继续认为0x5bce10是这个table的地址,因为如果0x5bce10是个无效地址,c代码会出segment fault。
2,我测试的方法不对。因为table应该是个数据结构。我测试时计划是把它当成一个数组访问的。

点击(此处)折叠或打开

  1. D:\lab\lua>lua
  2. Lua 5.1 Copyright (C) 1994-2006 Lua.org, PUC-Rio
  3. > require "wrapper"
  4. > tbl={}
  5. > tbl[1]=1
  6. > print(tbl)
  7. table: 00000000005BCE10
  8. > c_view_mem(0x5bce10,1)
  9. addr:5bce10, n:1
  10. 6026992 > c_view_mem(0x5bce10,2)
  11. addr:5bce10, n:2
  12. 6026992 0 > c_view_mem(0x5bce10,3)
  13. addr:5bce10, n:3
  14. 6026992 0 5 > c_view_mem(0x5bce10,4)
  15. addr:5bce10, n:4
  16. 6026992 0 1029 0 > c_view_mem(0x5bce10,5)
  17. addr:5bce10, n:5
  18. 6026992 0 1029 0 0 > tbl[2]=2
  19. > tbl[3]=3
  20. > tbl[4]=0xcc
  21. > c_view_mem(0x5bce10,10)
  22. addr:5bce10, n:10
  23. 6026848 0 517 0 0 0 4705616 0 1725575392 0 > print tbl
  24. stdin:1: '=' expected near 'tbl'
  25. > print(tbl)
  26. table: 00000000005BCE10
  27. > c_view_mem(0x5bce10,20)
  28. addr:5bce10, n:20
  29. 6026848 0 517 0 0 0 4705616 0 1725575392 0 1725575392 0 5995728 0 4 0 0 0 164835
  30. 6851 -1879047995 > c_view_mem(0x5bce10,30)
  31. addr:5bce10, n:30
  32. 6026848 0 517 0 0 0 4705616 0 1725575392 0 1725575392 0 5995728 0 4 0 0 0 164835
  33. 6851 -1879047995 5995872 0 4 0 0 0 0 0 6027328 0 > print(tbl[1])
  34. 1
  35. > print(tbl[2])
  36. 2
  37. > c_view_mem(0x5bce10,40)
  38. addr:5bce10, n:40
  39. 6026848 0 517 0 0 0 4705616 0 1725575392 0 1725575392 0 5995728 0 4 0 0 0 164835
  40. 6851 -1879047995 5995872 0 4 0 0 0 0 0 6027328 0 0 0 0 0 0 0 0 0 1648356860 -176
  41. 1607483 > c_view_mem(0x5bce10,50)
  42. addr:5bce10, n:50
  43. 6026848 0 517 0 0 0 4705616 0 1725575392 0 1725575392 0 5995728 0 4 0 0 0 164835
  44. 6851 -1879047995 5995872 0 4 0 0 0 0 0 6027328 0 0 0 0 0 0 0 0 0 1648356860 -176
  45. 1607483 5995584 0 16777732 1566088248 32 0 1768191091 976304750 658319136 188693
  46. 8400 >
  要读Lua的源码。
阅读(1293) | 评论(0) | 转发(0) |
0

上一篇:cygwin琐记

下一篇:lua的一些问题 0.1

给主人留下些什么吧!~~