클래스가 있습니다. C. C에 선언 된 멤버 변수가 있습니다. bool markerStart;sizeof (* this) 값이 잘못됨
C 내에서 sizeof (* this)를 호출하면 0x216 바이트의 값이 제공됩니다.
C 내의 다른 곳에서 : markerStart = false;
markerStart를 false로 설정하는 대신이 호출은 실제로 메모리의 다음 클래스 시작을 방해합니다!
markerStart = false;
06FB6B7F mov eax, dword ptr [this]
06FB6B78 mov byte ptr [eax+218h], 0
두 번째 이동 명령이 + 0x218 제로에 바이트를 설정되어 있지만 클래스는 0x216 바이트이기 때문에,이 메모리를 건드리지된다
디스 어셈블 된 코드를 보면, 내가 발견!
의견에 대한 응답으로, 그것은 확실히 markerStart = false 명령입니다. 나는 디스어셈블러 뷰와 메모리 뷰 (그리고 데이터 브레이크 포인트를 사용하여 Windbg 사용)에서 일어나는 것을 볼 수 있습니다. 다음 클래스의 첫 번째 바이트는 0으로 설정되고 vftbl 포인터는 엉망이됩니다.
참고 : markerStart의 주소를 가져 와서 이것을 빼면 0x211이 생성됩니다!
누구든지 내게이 문제를 해결하기 위해 어디서부터 시작해야할지 알려줄 수 있습니까?
업데이트 : 모든 도움에 감사드립니다. 코드가 없으면 어느 누구도 문제를 해결할 수 없었습니다. 내가 찾고 있던 것은 어디서부터 시작해야할지에 대한 암시였습니다. 여러분 중 대다수가 훌륭한 힌트를 주셨습니다. 감사합니다!
마침내 문제가 발견되었습니다. 이 경우 정렬은 하나의 클래스에서 설정되었으며 중요한 코드 블록 다음에 올바르게 재설정되지 않았습니다. 잘못 정렬 된 클래스는 C 클래스 선언 바로 전에 컴파일되므로 문제가 발생한 부분입니다.
문제를 설명하는 실제 C++ 코드를 게시하십시오. –
실제 코드를 게시 할 수 있습니까? C의 정의는 좋은 시작이 될 것입니다 – PaulJWilliams
아마도 218! = 0x218 – Skizz