56.windbg-s, #(검색 문자열, 주소, 어셈블리)
3839 단어 windbg
s(Search Memory)
s 명령 검색 메모리 지정 템플릿 찾기
1. 메모리 유출의 단서를 찾는다.예를 들어 현재 메모리가 유출된 내용이 고정된 문자열이라는 것을 알면 DLL 영역에서 이 문자열이 나오는 주소를 검색한 다음에 이 주소가 어떤 코드에 사용되는지 검색해서 이 메모리가 어디에서 분배되기 시작했는지 찾아낼 수 있다. 2.오류 코드의 근원을 찾다.예를 들어 현재 프로그램이 0x80074015와 같은 코드를 되돌려준 것을 알지만, 이 코드가 어느 내부 함수에서 되돌려받았는지 모른다.코드 영역에서 0x80074015를 검색하면 이 코드를 되돌릴 수 있는 함수를 찾을 수 있습니다.
예를 들어 제 코드에char*g 가 있어요.char = "I am string";전역 문자열 변수
찾고 싶은데, 이건 틀림없이 놓여 있을 거야.rdata 단락에서0:000> !dh -s 01270000
SECTION HEADER #3
.rdata name
1D11 virtual size
15000 virtual address
1E00 size of raw data
3A00 file pointer to raw data
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
(no align specified)
Read Only
//문자열 검색 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
s-sa 및 s-su 명령은 지정되지 않은 ASCII 및 유니코드 문자열을 검색합니다.이것은 세그먼트 메모리에 인쇄 가능한 문자가 포함되어 있는지 확인하는 데 유용합니다.
s-a 및 s-u 명령은 각각 지정된 ASCII 및 유니코드 문자열을 검색하는 데 사용됩니다.이 문자열들은 반드시 끝을 맺어야 하는 것은 아니다0:000> s -sa 01270000+15000 L1D11
0128573c "I am string"
01285868 "bad allocation"
012858e0 "Stack around _alloca corrupted"
01285908 "Local variable used before initi"
01285928 "alization"
0128593c "Stack memory corruption"
01285958 "Cast to smaller type causing los"
0:000> s -a 01270000+15000 L1D11 "I am"
0128573c 49 20 61 6d 20 73 74 72-69 6e 67 00 25 73 0a 00 I am string.%s..
flag[1]을 사용하여 검색 출력에 일치하는 항목의 주소만 표시할 수 있습니다.이 옵션이 사용됩니다.foreach는 출력을 파이프를 통해 다른 명령에 전달하여 입력할 때 매우 유용하다.
[] 기호가 있음을 주의하십시오0:000> s -[1]a 01270000+15000 L1D11 "I am"
0x0128573c
0:000> .foreach (addr {s -[1]a 01270000+15000 L1D11 "I am"}){da ${addr}}
0128573c "I am string"
//메모리 주소 검색 ------------------------------------------------------------------------------------------------------------------------------------------
printf의 호출 주소 검색009614d4 test1!printf = <no type information>
009682c8 test1!_imp__printf = <no type information>
0:000> s -[1]d 00961431 L130000 009682c8
0x0096145d
0:000> u 0096145d L2
test1!wmain+0x2d [d:\windbg\test1\test1.cpp @ 23]:
0096145d c8829600 enter 9682h,0
00961461 83c408 add esp,8
0:000> ub 00961461 L1
test1!wmain+0x2b [d:\windbg\test1\test1.cpp @ 23]:
0096145b ff15c8829600 call dword ptr [test1!_imp__printf (009682c8)]
(역어셈블리)
어셈블리 코드에서 지정한 템플릿에 맞는 데이터 검색0:001> lm m test1
start end module name
00a50000 00a6b000 test1 C (private pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\test1.pdb\0142AD0EED1143078D35079F6E0C70AB5\test1.pdb
0:001> # test1!_imp__printf 00a50000
test1!printf:
00a614d4 ff25c882a600 jmp dword ptr [test1!_imp__printf (00a682c8)]
0:001> # test1!_imp__printf ///<
test1!ThreadProc+0x58 [d:\windbg\test1\test1.cpp @ 23]:
00a61b48 ff15c882a600 call dword ptr [test1!_imp__printf (00a682c8)]
0:001> # test1!_imp__printf
test1!wmain+0x4d [d:\windbg\test1\test1.cpp @ 33]:
00a630dd ff15c882a600 call dword ptr [test1!_imp__printf (00a682c8)]
주소도 함수 이름으로 직접 대체할 수 있다0:001> # *test1!_imp__printf* test1!wmain
test1!wmain+0x4d [d:\windbg\test1\test1.cpp @ 33]:
00a630dd ff15c882a600 call dword ptr [test1!_imp__printf (00a682c8)]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
벌레 의 정취:0 으로 인 한 붕괴 제거
내 핵 이 취약 한 이 유 는 자신 을 잘 격 리 할 방법 이 없 기 때문이다.그것 은 하나의 큰 전체 로 영 광 스 럽 고 손상 되 는 큰 전체 에 속한다.그것 은 모든 것 을 순서대로 집행 해 야 한다.그렇지 않...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
0:000> !dh -s 01270000
SECTION HEADER #3
.rdata name
1D11 virtual size
15000 virtual address
1E00 size of raw data
3A00 file pointer to raw data
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
40000040 flags
Initialized Data
(no align specified)
Read Only
0:000> s -sa 01270000+15000 L1D11
0128573c "I am string"
01285868 "bad allocation"
012858e0 "Stack around _alloca corrupted"
01285908 "Local variable used before initi"
01285928 "alization"
0128593c "Stack memory corruption"
01285958 "Cast to smaller type causing los"
0:000> s -a 01270000+15000 L1D11 "I am"
0128573c 49 20 61 6d 20 73 74 72-69 6e 67 00 25 73 0a 00 I am string.%s..
0:000> s -[1]a 01270000+15000 L1D11 "I am"
0x0128573c
0:000> .foreach (addr {s -[1]a 01270000+15000 L1D11 "I am"}){da ${addr}}
0128573c "I am string"
009614d4 test1!printf = <no type information>
009682c8 test1!_imp__printf = <no type information>
0:000> s -[1]d 00961431 L130000 009682c8
0x0096145d
0:000> u 0096145d L2
test1!wmain+0x2d [d:\windbg\test1\test1.cpp @ 23]:
0096145d c8829600 enter 9682h,0
00961461 83c408 add esp,8
0:000> ub 00961461 L1
test1!wmain+0x2b [d:\windbg\test1\test1.cpp @ 23]:
0096145b ff15c8829600 call dword ptr [test1!_imp__printf (009682c8)]
어셈블리 코드에서 지정한 템플릿에 맞는 데이터 검색
0:001> lm m test1
start end module name
00a50000 00a6b000 test1 C (private pdb symbols) C:\Program Files (x86)\Debugging Tools for Windows (x86)\sym\test1.pdb\0142AD0EED1143078D35079F6E0C70AB5\test1.pdb
0:001> # test1!_imp__printf 00a50000
test1!printf:
00a614d4 ff25c882a600 jmp dword ptr [test1!_imp__printf (00a682c8)]
0:001> # test1!_imp__printf ///<
test1!ThreadProc+0x58 [d:\windbg\test1\test1.cpp @ 23]:
00a61b48 ff15c882a600 call dword ptr [test1!_imp__printf (00a682c8)]
0:001> # test1!_imp__printf
test1!wmain+0x4d [d:\windbg\test1\test1.cpp @ 33]:
00a630dd ff15c882a600 call dword ptr [test1!_imp__printf (00a682c8)]
주소도 함수 이름으로 직접 대체할 수 있다
0:001> # *test1!_imp__printf* test1!wmain
test1!wmain+0x4d [d:\windbg\test1\test1.cpp @ 33]:
00a630dd ff15c882a600 call dword ptr [test1!_imp__printf (00a682c8)]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
벌레 의 정취:0 으로 인 한 붕괴 제거내 핵 이 취약 한 이 유 는 자신 을 잘 격 리 할 방법 이 없 기 때문이다.그것 은 하나의 큰 전체 로 영 광 스 럽 고 손상 되 는 큰 전체 에 속한다.그것 은 모든 것 을 순서대로 집행 해 야 한다.그렇지 않...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.