2013-08-23 2 views
1

특정 함수 호출에 대한 매개 변수 목록을 만들기 위해 프로그램의 이진 실행 파일을 분석하려고합니다. OllyDbg를 사용하여 함수에 대한 모든 호출 목록을 찾을 수는 있지만 실제로 코드를 실행하지 않고 매개 변수를 표시하는 것이 아무것도 표시되지 않습니다.이진 실행 파일에서 함수에 매개 변수 나열

함수가 매개 변수 2 개를 취하는 것처럼 보입니다. 각 매개 변수는 각 인스턴스의 CALL 바로 앞에 간단한 PUSH가 제공됩니다. DiStorm을 사용하여이 단일 인스턴스에 대한 코드를 숨길 수 있지만 다른 곳에서 사용할 수있는보다 일반적인 솔루션을 선호합니다. OllyDbg는 함수를 실행할 때 매개 변수의 수를 알고있는 것처럼 보이므로 정적 분석을 통해 매개 변수의 수를 결정할 수 있다고 생각하지만 x86 어셈블리에 대한 내 이해는 정직하게 매우 제한적입니다.

Diestorm을 사용하는 유일한 방법은 없습니까?이 함수를 호출하기 전에 마지막 2 PUSH 문을 잡아 둘 수 있습니까?

+0

함수에 대한 인수를 PUSH 명령으로 스택에 배치 할 필요는 없습니다. 물론 표준 i386 C 함수 이외의 ABI에서 인수는 레지스터로 전달 될 수 있습니다. 사실 어떤 경우에는 얼마나 많은 인수가 전달되었는지를 아는 것이 불가능할 수도 있습니다. 일반적인 경우에이를 수행 할 방법이 없습니다. 가장 좋은 방법은 런타임에 호출을 트랩하고 인수를 기록하는 것입니다. –

+0

가변 인수 함수로 제한된 수로 전달 된 함수의 수를 구별 할 수없는 경우가 있습니까? 그렇다면, 나는 그 중 어떤 것에도 뛰어들 것으로 예상하지 않습니다. 함수 인수가 PUSH를 거치지 않아도되고 스택에있을 필요가 없다는 것을 알고 있습니다. 이 특정 사례 (인수가 스택에 있고 PUSH로 넣는 위치)에 대한 솔루션이 필요하지만 더 일반적인 솔루션이있는 경우이를 선호합니다. 인수를 전달할 수있는 가능한 모든 방법을 설명 할 필요는 없습니다. – qazmlpok

+0

메소드 또는 함수 정의가 고정되어 있지 않은 바이트 코드에서 매개 변수를 가져 오는 일반적인 솔루션을 정의하는 것은 어렵습니다 (Java 또는 .NET의 경우처럼). 모든 최적화 작업을 해제하려고하면 스택에 매개 변수를 밀어 넣을 수 있습니다. 하지만 최적화는 최적화이며 이러한 것은 프로세서마다 다릅니다. 예를 들어 ARM은 파라미터를위한 레지스터 (IIRC'r2'에서'r5')를 가지고 있습니다. – user35443

답변

0

내가 이것을 할 수있는 유일한 방법은 함수를 살펴보고 EBP에 대한 모든 참조를 확인하는 것입니다. 함수 프롤로그에서

, 당신은 일반적으로 표시됩니다

push ebp 
mov ebp, esp 
sub esp,n 

새로운 기능 스택 프레임이 설정되는 곳입니다. 어느 조금 당신은 주어진 함수 내에서 EBP + (n>=8) 모든 참조를 검사하여 인수의 수를 얻을 수있는이

EBP+n -> arg n 
     ... 
EBP+8 -> arg 0 
     return address 
EBP -> stack address 
EBP-4 -> local var 0 
     ... 
EBP-n -> local var n 
ESP -> 

처럼 보일 것입니다.

이제는 함수 호출 이전의 푸시 명령어 수를 살펴볼 수 있지만 함수가 스택의 다른 부분을 참조하지 않는다고 보장 할 수는 없습니다.

IDA은 함수 인수를 계산하는 데 아주 능숙합니다. 나는 당신이 그걸 줄 것을 제안한다!

.text:00022042     ; int __stdcall sub_22042(USHORT, char, char) 
.text:00022042     sub_22042 proc near  ; CODE XREF: sub_21DC4+73p 
.text:00022042           ; sub_22524+37p 
.text:00022042 
.text:00022042     arg_0= word ptr 8 
.text:00022042     arg_4= byte ptr 0Ch 
.text:00022042     arg_8= byte ptr 10h 
.text:00022042 
.text:00022042 8B FF    mov  edi, edi 
.text:00022044 55     push ebp 
... 
관련 문제