나는 라우터의 플래시 메모리를 덤프하는 응용 프로그램을 만듭니다 (brn-tool과 비슷 함). 라우터의 플래시 메모리는 이미 직렬 케이블을 통해 액세스 할 수있는 부트 로더에서 덤프 될 수 있습니다.C가있는 라우터에서 플래시 메모리 덤프
지금까지 생성 된 응용 프로그램은 10000 바이트 (부트 로더가 한 번의 스윕에서 반환하는 최대 바이트)를 가져올 수 있습니다.
나머지 플래시 메모리 바이트를 가져 오는 데 문제가 있습니다.
앞서 언급했듯이 각각의 옵션을 선택하고 읽을 바이트 수를 입력하면 부트 로더 메뉴에서 바이트를 읽을 수 있습니다. 코드는 다음과 같습니다.
int ReturnByte(int FileDescriptor, char * StartAddress)
{
// Create the Variable to hold the Start Address in Hexadecimal Notation
char ModdedStartAddress[10];
// Convert the Decimal Input to Hexadecimal
sprintf(ModdedStartAddress,"%X", (unsigned int)strtol(StartAddress, NULL, 10));
// Append a \r to simulate an Enter Press
ModdedStartAddress[strlen(ModdedStartAddress)] = '\r';
// Go inside the Read Menu
char Character = 'R';
write(FileDescriptor, &Character, 1);
// Input the Starting Read Address
write(FileDescriptor,ModdedStartAddress, sizeof(ModdedStartAddress) - 1);
// Set the Data Length to 1 Byte
Character = '3';
write(FileDescriptor, &Character, 1);
// Set the Read Count to 10000
write(FileDescriptor, "10000\r", sizeof("10000"));
return 10000;
}
한 번 실행하면이 메서드는 제대로 작동하고 10000 바이트를 올바르게 출력합니다.
그러나 전체 플래시 덤프를 만들려면 위 방법을 여러 시작 주소로 여러 번 실행해야합니다. 메서드가 여러 번 실행될 때 메뉴 등의 시퀀스는 프롬프트 내에있을 때 실행되지 않고 대신 메모리 데이터가 장치에 의해 반환되는 동안 실행됩니다.
다음과 같이 메뉴가 작동하는 방법의 개요는 다음과 같습니다
Read Menu (Option R)
Start Address to Read
Data Length (Set to 3 for 1 Byte)
Read Count (Set to a maximum of 10000)
*The Router starts outputting a hex dump*
Back to Menu
나는 모든 데이터가 시리얼 포트에서 전송 된 것을 확인하는 방법이 날씨를 알아 내기 위해 노력하고 있어요을 다시하기 위해 방법을 실행합니다.
직렬 포트로 연결하는 데 termios 라이브러리를 사용하고 있습니다.
은 귀하의 질문에 정확한 점점 앤드류 보그
내가 겪고있는 문제는 응용 프로그램이 모든 바이트를 라우터에서 보내기 전에 get memory bytes 시퀀스를 다시 보내야한다는 것입니다. – Andrew
안녕하세요. 모든 원시 코드를 pastebin 또는 다른 사이트에 업로드 할 수 있습니까? 나/우리가 당신의 문제를 다루기가 더 쉬울 것입니다. – MrSykkox