2012-01-07 8 views
1

ollydbg를 사용하여 프로그램을 디버깅하려고하는데 SS 접두사를 사용하여 인덱스 주소를 지정하는 데 의의가 있습니다. - 0012FDCB 이때어셈블리 스택 인덱스 주소

하나의 감산 EBP(0012FDCC) 뾰족 해결 EBX에서 8 비트 이동 명령

MOV BYTE PTR SS:[EBP-1],BL 

:

여기서 스크린 샷이다.

위의 내용이 올바르지 않으면 알려주세요.

ollydbg 프로그램에서 오른쪽 아래에는 주소의 첫 번째 열이있는 스택의 표현이 있습니다. 0012FDCB에 입장이없는 이유는 어디에 0012FDCB입니까?

답변

2

나는 ollydbg에 대해 아무것도 모른다. 잘 알고있는 사람도 대답을 게시 할 것입니다.

당신이 우리에게 보여준 것이 무엇인지에 대한 이해는 대부분 정확합니다 : BL의 내용 (의 하위 비트는 8 비트 EBX)을 가리키는 스택 세그먼트의 주소로 이동합니다 [EBP 마이너스 1] EBP가 0012FDCCh이면, 바이트는 0012FDCBh에 저장 될 것이다.

우리는 보통 0012FDCBh가 어디를 가리키고 있다고 말하지 않으며, 기술적으로는 메모리 주소라고 말하는 것이 더 정확할지라도,이 경우에는 바이트를 포함하는 메모리 위치라고 말할 수 있습니다 따라서 어떤 의미에서 숫자는 '포인트'를 1 바이트로 나타냅니다. 그러나 포인터 나 레지스터는 순수한 숫자가 아닌 메모리를 가리키는 것으로 생각하는 것이 좋습니다.

ollydbg가 0012FDCBh를 표시하지 않는 이유는 알 수 없습니다. 그게 보이지 않는다고 확신합니까? 아마도 0012FDCCh와 0012FDC8h를 보여주고 있습니까? 그렇다면 DWORD로 그룹화 된 스택 메모리를 표시하기 때문에 0012FDCBh는 DWORD 내의 0012FDC8h에있는 4 바이트 중 하나에 해당하기 때문에 표시되지 않습니다. 0012FDC8h에 저장된 DWORD 값을 MOV 명령을 통해 단일 단계로 살펴보고 그 단어의 최상위 바이트가 BL 값으로 변경되어야합니다. (해당 주소의 값이 BL의 값과 다른 경우) Ollydbg는 하나의 DWORD보다 긴 행으로 그룹화 된 메모리를 표시 할 수도 있지만 동일한 원칙이 적용됩니다.

+1

andmart, 스크린 샷을 본 후 발생한 일이 정확히 내가 추측 한 것으로 보입니다. ollydbg는 DWORDS의 스택 내용을 표시합니다. 그러므로, DWORD의 가장 중요한 바이트를 0012FDC8h에서 보면 BL이 거기에 저장 될 것입니다. –