필자가 이해하는 한 (잘못된 부분이 있으면 수정하십시오.) 컴파일러의 출력은 사용 된 아키텍처 버전, 컴파일러 및 운영 체제에 따라 다릅니다.다른 OS 버전의 컴파일러 출력
우분투 릴리스 16.04 x84-64를 사용하고 gcc 버전 5.4 (또는 예제의 경우 OS, arch, compiler의 다른 혼합)로 c 파일을 컴파일하면됩니다.
내가 지금까지 이해했듯이 동일한 아치 및 컴파일러 버전으로 동일한 우분투 릴리스로 동일한 c 파일을 컴파일한다면 동일한 어셈블리 코드를 생성해야합니다.
몇 번 시도해 본 후에 이것이 잘못된 것 같은 느낌을 받았는데, 어떻게 가능합니까?
컴파일러의 출력이 특정 OS의 릴리스에 의존합니까?
예제 중 하나는 https://github.com/tbuktu/libntru을 다른 우분투 버전에서 컴파일하고 다른 어셈블리를 수신하는 것입니다.
컴파일러 출력도 최적화 플래그에 따라 달라지며 (* 많은 *가 있음). –
서로 다른 OS 버전에서 정확히 동일한 컴파일러 버전을 사용하는 방법을 정확히 알았습니까? 그들은 다르게 구성 될 수 있습니까? 예 : [그들 중 하나는'--enable-default-pie'] (https://stackoverflow.com/questions/43367427/32-bit-absolute-addresses-no-longer-allowed-in-x86-64-linux/) 46493456 # 46493456), 또는'-fstack-protector'에 대한 다른 기본값은 무엇입니까? –
정확히 asm을 어떻게 비교 했습니까? [gcc -O3 -S를 사용하여 컴파일러의 * 실제 * asm 출력을 얻었습니까?] (https://stackoverflow.com/questions/38552116/how-to-remove-noise-from-gcc-clang-assembly- 출력), 또는 링크 된 바이너리를 디스 어셈블 했습니까? 아니면 바이너리를'cmp' 같은 것으로 비교 했습니까? –