컴파일러 옵션에따라 디스 어셈블 코드가 달라지나요?
글쓴이: lee16abc / 작성시간: 화, 2008/03/11 - 5:44오후
안녕하세요.
C++ 기반 라이브러리를 하나 만들었는데요.
제 컴퓨터에선 잘 되는데, 다른 프로그램에 붙이니까 어떤 프로그램은 잘 동작하구
어떤 프로그램에서는 자꾸 충돌이 나서 (Memory Access violation)
왜그런가 하고, 브레이크 포인트를 걸어서 디스어셈 코드를 Step - over 로 타고 가보니까
메모리 번지수가 들어가야할 레지스터에 자꾸만 절대 상수값이 들어가버려서 그 상수값을 메모리번지수로 인식해서
충돌나는거 같더라구요.
제 컴퓨터에서 나오는 라이브러리 디스어셈블 코드랑, 그 프로그램에서 나오는 디스어셈블 코드가
같은 라이브러리 파일임에도 불구하고 많이 틀리게 나오던데..
컴파일러 때문에 그런건가요? 같은 VC++ 컴파일러인데, 옵션이 틀려서 그럴까요..
디스어셈블되서 나오는 코드를 임의로 바꿔줄수도 없는 노릇이고, 계속 저기에서 충돌나서 작업을 진행 못하고 있네요 ..
혹시 경험 해보신 분 계시면 도움말씀좀 부탁드립니다..
Forums:
컴파일러가 다르면
컴파일러가 다르면 같은 코드라도 다른 어셈코드가 나올수 있습니다.
하지만 한 컴파일러에서 이미 컴파일된 코드는 어셈코드가 변할수 없지요.
디버거로 봤더니 컴마다 어셈코드가 다르다는것은 프로그램이 잘못된 메모리를 참조하여
프로그램 코드를 바꿨다고 밖에 생각이 안듭니다.
작성하신 라이브러리에 99.9%정도 원인이 있으니 잘 찾아보시면 답이 나올겁니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기