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

发布于 2022-06-17 09:25:37 字数 2146 浏览 783 评论 6

使用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( &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] ), &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 );
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

流星番茄 2022-06-19 06:27:42

原帖由 "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修改肯定是出错的。

血之狂魔 2022-06-19 06:27:07

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

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

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

想你只要分分秒秒 2022-06-19 06:26:36

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

北陌 2022-06-19 06:26:22

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

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

猫弦 2022-06-19 06:18:00

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

超可爱的懒熊 2022-06-19 06:01:08

我使用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都可以。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文