반응형

메모리 덤프를 해결하는 방법에 대해 간단히 팁을 알려드립니다.

메모리 덤프는 실시간이 아니라 특정 시점에 사용중인 메모리를 덤프 하는 것입니다.

그렇기 때문에 메모리를 사용하고나서 바로 사용한 메모리 공간을 초기화 시켜주면 덤프 시 해당 메모리 내용을 볼 수 없게 됩니다.

하지만 현실은 그렇게 쉽지 않죠.. c/c++로 직접 메모리를 제어할 경우 사용한 메모리 초기화하고 제거하면 되겠지만 언어 자체가 메모리를 알아서 관리해 주다보니 제어하기 쉽지 않죠.

해결 방법은 메모리를 생성하여 해당 메모리 내용을 치환하면 됩니다.

예를들어 메모리 버퍼를 생성하고 "ABC12"라는 내용이 할당하였다고 할때 다음과 같이 특수문자로 치환합니다.

'A'->'{', 'B'->'}', 'C'-'>', '1'->'[', '2'->']'

해당 메모리 사용 후 생성된 버퍼를 '0'으로 모두 채워주면 덤프로 해당 내용이 특수문자로 나오거나 빈값으로 처리 됩니다.

물론 원본 데이터를 사용해야 할 경우 로컬 변수로 버퍼를 생성하고 치환된 데이터를 메모리 카피하여

다시 정해진 룰에 따라 치환하여 원본 데이터를 사용하고 생성된 로컬변수는 다시 '0'으로 채워줍니다.

재밌게도 메모리에 다른값을 할당하지 않고 replace 함수로 치환하게 되면 딥 메모리 카피가 일어나지 않고

해당 메모리 실제 데이터 값만 변경이 이루어져 덤프 이슈를 해결할 수 있습니다.

 

2020/12/08 - [프로그래밍/Java Script] - Android, iOS 앱 설치여부 체크 및 스토어 이동

2020/08/21 - [Android/Tips] - aab파일 apk파일로 변환

2020/08/11 - [iOS/Swift] - WKWebView 화면 출력 완료 이벤트

2020/08/06 - [iOS/Tips] - 개발관련 폴더 경로

2020/07/19 - [Android/Tips] - 안드로이드 원격 디버깅 방법

2020/07/18 - [Android/Tips] - Cannot convert string value 'JETPACK_COMPOSE' to an enum value of type 'com.android.builder.model.AndroidGradlePluginProjectFlags$BooleanFlag' (valid case insensitive values: APPLICATION_R_CLASS_CONSTANT_IDS, TEST_R_CLASS_CONSTANT_IDS, TRANSITIVE_R_CLASS)

2020/07/18 - [Android/Tips] - OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

2020/07/17 - [iOS/Tips] - 웹에서 iOS 앱 설치여부 체크

2020/07/14 - [Android/Tips] - 웹에서 안드로이드 앱을 실행 (Custom URL Scheme)

2020/07/11 - [OS/Mac OS X] - SMC(System Management Controller) 재설정

2020/07/11 - [OS/Mac OS X] - NVRAM(PRAM) 재설정 방법

2020/07/11 - [iOS/Swift] - Dictionary sort

2020/07/11 - [iOS/Swift] - UTC시간, Locale시간 변경

2020/07/11 - [iOS/Swift] - SEED 블록암호 알고리즘 CBC (Cipher Block Chaining) 예제2

반응형

'개발 > Note' 카테고리의 다른 글

특수문자 발음  (0) 2020.12.11
Bluetooth UUID  (0) 2020.12.10
Android, iOS 앱 설치여부 체크 및 스토어 이동  (0) 2020.12.08
Luhn 알고리즘  (0) 2020.06.02
NFC Xcode 설정  (0) 2020.05.29
블로그 이미지

SKY STORY

,