免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3039 | 回复: 6
打印 上一主题 下一主题

如何对系统内存进行读操作? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-01-22 14:44 |只看该作者 |倒序浏览
使用sysi86获取指定进程的user buffer,可以成功,但对取到的
如user_t.u_procp(进程信息结构)或是user_t.u_base(I/O address)指针无法进行读操作-- memcpy/printf都不行,直接执行会coredump.
下面是取进程I/O地址及内容的代码:

#include <stdio.h>;
#include <sys/types.h>;
#include <sys/sysi86.h>;
#include <sys/user.h>;

char*_video_ram_addr;

int
main( int argc, char *argv[] )
{

         user_t        user_buf;
         char        buf[ 2048 ];
         FILE        *fp;
         int        i, j, k = 0;

         memset( &amp;user_buf, 0x00, sizeof( user_t ) );
         memset( buf, 0x00, sizeof( buf ) );
         if( ( fp = fopen( "video.log", "w" ) ) == NULL ) {
                 perror( "open file error!" );
                 exit( 1 );
        }
        sysi86( RDUBLK, atoi( argv[1] ), &amp;user_buf, sizeof( user_t ) );

        _video_ram_addr = user_buf.u_base;

        printf( "video_ram_addr:[0x%p]\n", _video_ram_addr );

        for( i = 0 ; i < 2000; i ++, _video_ram_addr++ ) {
                buf = *_video_ram_addr;
                fprintf( fp, "HEX:[0x%x]CHAR:[%c]\n", buf, buf );
        }

         fclose( fp );
}

论坛徽章:
0
2 [报告]
发表于 2003-01-22 14:53 |只看该作者

如何对系统内存进行读操作?

我使用SCO UNIX 5.0.5;
使用adb跟踪程序,到进行赋值时,会提示memory fault;
关于对系统inode/file/proc三个结构的访问,各位如有其它的办法访问(比如直接读/dev/kmem,好像系统提供的pstat/ps就是这么做的),请指教。
对于这段程序,我的本意是取得指定进程的一些信息,如打开的文件、I/O地址,同时想对进程的I/O进行监控。
对外,对于SCO的系统调用反汇编出来最后都只能跟到call 0x7:0x0,如何反汇编0x7:0x0部分的代码,如果各位请楚,也请指教。

同时,欢迎大家与我交流frompinge@163.net/frompinge@163.com都可以。

论坛徽章:
0
3 [报告]
发表于 2003-01-25 10:16 |只看该作者

如何对系统内存进行读操作?

你这么做,我觉得不行,你说的那块数据属于内核管理范围的东西,用户态没有读写的权力。OSR5又不好象LINUX容易修改系统调用,因此我建议做个驱动程序吧,利用驱动程序完成在内核和用户态通讯。

论坛徽章:
0
4 [报告]
发表于 2003-01-25 10:17 |只看该作者

如何对系统内存进行读操作?

原帖由 "frompinge" 发表:
我使用SCO UNIX 5.0.5;
使用adb跟踪程序,到进行赋值时,会提示memory fault;
关于对系统inode/file/proc三个结构的访问,各位如有其它的办法访问(比如直接读/dev/kmem,好像系统提供的pstat/ps就是这么做的),..........

哈哈,我也有这个爱好,我的QQ是50163813。

论坛徽章:
0
5 [报告]
发表于 2003-01-25 12:21 |只看该作者

如何对系统内存进行读操作?

多谢,顺便问问有没有关于SCO下驱动程序开发的相关资料?
我没有这方面的经验,请多指教!

论坛徽章:
0
6 [报告]
发表于 2003-01-26 13:41 |只看该作者

如何对系统内存进行读操作?

原帖由 "frompinge" 发表:
多谢,顺便问问有没有关于SCO下驱动程序开发的相关资料?
我没有这方面的经验,请多指教!

我没有电子文档资料。你可以在SCO的站点看。

http://docsrv.caldera.com/下有个“Hardware and Driver Development ”,你可以去找找。

论坛徽章:
0
7 [报告]
发表于 2003-01-27 08:52 |只看该作者

如何对系统内存进行读操作?

原帖由 "frompinge" 发表:
我使用SCO UNIX 5.0.5;
使用adb跟踪程序,到进行赋值时,会提示memory fault;
关于对系统inode/file/proc三个结构的访问,各位如有其它的办法访问(比如直接读/dev/kmem,好像系统提供的pstat/ps就是这么做的),..........

0x7:0x0是一个调用门选择子和偏移量(后者不用),你可以参见(/usr/include/seg*.h),USER_SCALL定义的就是0x7,表示LDT的第零项(7=000000111b,表示的意思是LDT,3级的特权),通过CALL,系统控制转移到了内核态,这里的CALL就是操作系统原理讲的访管指令。由于LDT表虽然可以说是用户的数据,但是管理还是归系统管理的,所以用ADB修改肯定是出错的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP