Star Liu 写道:
I wrote a program to copy the memory content of FFFF0000-FFFFFFFF to a
file, but it says "Segmentation fault", (i use AMD64 lenny, so the
address is long), how could i fix it? thanks!

#include <string.h>
#include <stdio.h>


void CopyMemoryToFile(char* FilePath, long StartAddress, long OffSet)
{
        FILE* Memory;
        Memory=fopen (FilePath, "w");
        if(Memory!=NULL)
        {
                void* Start;
                Start=StartAddress;
        fwrite(Start, 1, OffSet, Memory);
    }
        fclose(Memory);

}
int main (void)
{
        CopyMemoryToFile("~/cgi-bin_d/Memory",0xFFFF0000,0xFFFF);
        return 0;
}

行了行了,不用讲英文了,你上面说完我就知道你代码要出问题现在一看果然。 Linux引导到内核后就进入虚拟模式,这时候MMC接管了内存访问。你在访问内存的 时候是被映射了的(记不清是GDT,LDT还是什么了,好久前的东西啊..),这时候访问 0xFFFF0000只会报错。 另外,DOS下的内存转换算法是这样.段地址左移8位数学加偏移.你的地址也写错了, DOS下也通不过的.


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

回复