내부 시스템에서 게임 실행 파일의 PE 포맷에서 TimeDateStamp 값을 추출하여 버전 관리를 하고 있습니다.
TimeDateStamp는 MSDN에서 안내된 것처럼 빌드 시간의 unix timestamp로 정의돼 있기 때문에 이를 사용하고 있는데요.
최근 UE 5.6.1 에서 Shipping 빌드된 실행 파일 PE 포맷의 TimeDateStamp 값이 랜덤하게 생성되는 현상을 확인하였습니다.
[Image Removed]
상기 이미지와 같이 TimeDateStamp 값이 가리키는 시간은 2098년 5월 7일 수요일 오전 11:23:44 입니다.
내부 프로젝트 및 언리얼 엔진의 3인칭 예제에서도 Shipping 빌드의 동일한 현상을 확인하였습니다.
UE 빌드 파이프라인의 어떤 과정에서 TimeDateStamp 값이 조작되는지, 어떤 옵션으로 제어되는지 문의 드립니다.
그리고 TimeDateStamp 값을 PE 스펙대로 되돌려도 문제 없을지도 확인 부탁 드립니다.
재현 방법
언리얼 엔진의 3인칭 예제를 Windows x64 대상으로 Shipping 빌드하면 재현됩니다.
CFF Explorer 또는 보유하고 계신 PE 뷰어 툴을 이용해서 빌드된 실행 파일의 TimeDateStamp 값을 확인할 수 있습니다.
[Image Removed]
안녕하세요. 확인이 늦어져서 죄송합니다.
알려주신 TimeDateStamp 값을 확인 할 수 있었습니다.
관련 내용을 확인하여 답변드릴 수 있도록 하겠습니다.
안녕하세요.
답변이 늦어져서 죄송합니다.
TimeDateStamp값은 MSVC의 컴파일 링크 단계에서 기록하고, 모듈 로더가 바인딩된 모듈들을 로드할 때 신뢰 여부를 결정하는데 사용할 수 있는 것으로 확인되어, PE 값을 변경하는 부분은 빌드 툴의 스펙의 흐름에서 맞지 않는 것으로 같습니다.
https://devblogs.microsoft.com/oldnewthing/20180103-00/?p=97705
언리얼 엔진의 관련 옵션으로 TargetRules.cs에서 bDeterministic이 있고, Shipping 환경에서 활성화 되어 VCToolChain.cs 에서 컴파일 옵션에 영향을 줄 수 있는 것으로 확인됩니다.
https://dev.epicgames.com/documentation/en\-us/unreal\-engine/build\-configuration\-for\-unreal\-engine
/// <summary>
/// Set flags require for deterministic compiling and linking.
/// Enabling deterministic mode for msvc disables codegen multithreading so compiling will be slower
/// </summary>
[CommandLine("-Deterministic", Value = "true")]
[CommandLine("-NonDeterministic", Value = "false")]
[XmlConfigFile(Category = "BuildConfiguration")]
[RequiresUniqueBuildEnvironment]
public bool bDeterministic
{
get => bDeterministicPrivate ?? (Configuration == UnrealTargetConfiguration.Shipping);
set => bDeterministicPrivate = value;
}
private bool? bDeterministicPrivate;
그리고 Bootstrap 형식의 실행 파일을 생성하는 경우, 엔진 바이너리 폴더의 BootstrapPackagedGame-Win64-Shipping.exe 실행 파일을 복제하고, 아이콘 리소스만 업데이트하고 TimeDateStamp는 변경하지 않는 것으로 확인됩니다.