- 论坛徽章:
- 0
|
使用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 );
} |
|