用C语言写一个程序,访问一个进程的所有地址空间,并返回可读内存区域。大致思路为按页扫描所有地址空间,当访问无读权限内存区域时,将触发段错误,在段错误处理程序中longjmp回主循环并继续....,按此思路,大家可以试试扫描写权限区域。
- #include <stdio.h>
- #include <signal.h>
- #include <setjmp.h>
- #define PAGE_SIZE 0x1000
- #define ADDR_END 0xfffff000
- static volatile int addr;
- static volatile int flag;
- static jmp_buf jmpbuf;
- void handler(int signo)
- {
- longjmp(jmpbuf, 1);
- }
- int main(void)
- {
- for (; addr < ADDR_END; addr += PAGE_SIZE) {
- signal(SIGSEGV, handler);
- if (!setjmp(jmpbuf)) {
- int c = *(int *)addr;
- if (!flag) {
- printf("\n0x%x ~ ", addr);
- flag = 1;
- }
- }
- else if (flag) {
- printf("0x%x", addr - 1);
- flag = 0;
- }
- }
- return 0;
- }
阅读(817) | 评论(0) | 转发(0) |