c언어에서 호출하는 방식의 차이임 


총 3가지가 있음 


1. call by value (값에 의한 호출)

2. call by address (주소에 의한 호출)

3. call by reference ( 참조에 의한 호출)


예제를 통해 하나씩 살펴보자 


1. call by value 

예를들어 다음과 같이 두개의 매계변수를 받아 두 수를 교환하는 프로그램이 있다고 해보자


#include <stdio.h>


void swap(int x, int y)

{

    int tmp;

    tmp = x;

    x = y;

    y = tmp;

}


int main()

{

    int a = 20;

    int b = 30;

    

    swap(a,b);

    

    printf("%d , %d \n", a,b);

}



일케해서 프린트 문 찍으면 바뀔거 같은데 안바뀜 , 그냥 바뀌는건 swap() 함수내에서만 바뀌고 메인에서는 int a = 20; int b = 30 이니까 출력이 20 , 30 걍 일케댐 그럼 어케해야 


하냐 해서 나온게 call by address 임 


2. call by address

위에랑 똑같은 프로그램인데 이번엔 좀 다름 자세히 봐보셈 ㅋ 


#include <stdio.h>


void swap(int *x, int *y)

{

    int tmp;

    tmp = *x;

    *x = *y;

    *y = tmp;

}


int main()

{

    int a = 20;

    int b = 30;

    

    swap(&a,&b);

    

    printf("%d , %d \n", a,b);

}


짜라잔 ! 뭐가 달라졌는지 틀린그림 찾기 해보셈 총 3개임 !

하나. swap 함수에서 매개변수로 받는데 갑자기 *이 붙어버림
둘   . 그리고 swap 함수 내 x , y 앞에도 *이 붙어버림 
셋  . 마지막으로 메인 함수에서 swap 함수 호출할때 넘겨주는 인자값에 & 가 붙어버림 


여기서 알고 가야 할 사실 2개 
포인터에서 변수 앞에 & 가 붙으면 뭐다 ? 주소값
포인터에서 변수 앞에 * 가  붙으면 뭐다 ? 실제값

이해갔지 ? 

바바 만약

#include <stdio.h>


int main()

{

    int a = 20;

    int *p = &a;;

    

    printf("%d\n", a);

    printf("%d\n", &a);

    printf("%d\n", *p);

}



일케 있으면 &a 는 a변수가 메모리에 저장된 메모리 주소값이 나올꺼고 *p 는 20이 나올꺼임 ㅇㅇ 이해 안간다면 포인터 를 다시 공부하셈 (양주종의 코딩스쿨 - 여기 포인터 강의 좋음)

다시 돌아가서 swap(&a, &b) 로 a, b 의 주소값을 매계변수로 넘겨주고 실제 그 값(*x , *y 를 통해) 을 변경해 주기 때문에 저건 바뀌여서 출력됨 ㅇㅇ 

마지막으로 call by reference 이건데 이건 C문법이 아니라 C++ 문법임 

그래서 혹시라도 테스트 해보려면 확장자가 .c  가 아닌 .cpp 환경에서 해야할거임 아마도 ㅇㅇ 

3. call by reference 

#include <stdio.h>


void swap(int &x, int &y)

{

    int tmp;

    tmp = x;

    x = y;

    y = tmp;

}


int main()

{

    int a = 20;

    int b = 30;

    

    swap(a,b);

    

    printf("%d , %d \n", a,b);

}


call by reference 이거는 엄청 간단함 == 편함 == 좋음

그냥 매개변수에다가 & 를 통해 주소값을 참조하게 해줌 call by address 랑 비슷하지만 다름 뭐가 다른진 정확히 설명할수 없지만 머릿속으론 알고있음 

쨋든 이건 call by value 랑 똑같은데 그냥 매개변수에 & 를 통해 주소값을 넘겨줘 버리면 swap 이 댐 ㅇㅇ 굿 


정리 끝

'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
백준 2739번: 구구단  (0) 2018.01.23
백준 2742번: 기찍 N  (0) 2018.01.23
백준 2741번:N 찍기  (0) 2018.01.23

구구단을 찍는 문제이다 .


사용자 입력값이 구구단 단수가 된다.


  1 #include <stdio.h>

  2 

  3 int main()

  4 {

  5         int i,n ;

  6 

  7         scanf("%d" , &n);

  8 

  9         for(i=1; i<=9; i++)

 10                 printf("%d * %d = %d\n", n,i,n*i);

 11 

 12         return 0;

 13 

 14 }


이게 답이다


'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2742번: 기찍 N  (0) 2018.01.23
백준 2741번:N 찍기  (0) 2018.01.23

2742번 문제와 유사하다 근데 거꿀로 찍으면 된다.


그래서 조건문을 수정해 주었다 


사용자가 주는 인풋값을 i의 초기값으로 주어서 역순으로 찍게 만들었고, i 의 값의 최소값을 0으로 잡아주어 0 이하로 내려가지 못하게 하였으며, 역순으로 가기위해 i-- 옵션을 주었다.


처음에 0이하로 찍게 못해서 존나 내려가다가 랙걸림 ㅋ



  1 #include <stdio.h>

  2 

  3 int main()

  4 {

  5         int n,i;

  6         scanf("%d" , &n);

  7 

  8         for(i=n; i>0; i--)

  9                 printf("%d\n",i);

 10 

 11         return 0;

 12 }

 13 


끄읏!

'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2739번: 구구단  (0) 2018.01.23
백준 2741번:N 찍기  (0) 2018.01.23

이건단순 for 문을 이용하는 문제이다. 



입력이 5로 주어지면

1

2

3

4

5

일케 출력하는 문제



#include <stdio.h>


int main()

{

int n,i ;

scanf("%d" &n); 


for(i=1; i<=n; i++)

printf("%d\n", &i);


return 0;

}


끝 노잼이다

'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2739번: 구구단  (0) 2018.01.23
백준 2742번: 기찍 N  (0) 2018.01.23

6번임 


이번에도 문제가 비슷함 


Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial 
Ex) 00400000PASSWORD 



이거임 일단 언팩하는법은 5번에서 수행했으니 무난히~ 할 수 있고 , 언팩하면 OEP(Original Entry Point) 뜰태고,  키 찾는거는 뭐 또 문자열 검색해보면 나오겠지 



예 나왔죠 ?




예 풀었죠 ?


'개인공부 > Reverse Engineering' 카테고리의 다른 글

[코드엔진] Basic RCE 01 with ida  (0) 2018.08.04
Ida로 다시 정리 시작  (0) 2018.08.03
코드엔진 Reverse-L05  (0) 2017.12.21
코드엔진 Reverse-L04  (0) 2017.12.21
코드엔진 Reverse-L03  (0) 2017.12.21

5번문제임 



이 프로그램의 등록키는 무엇인가 ? 라고 물어봄 


여윽시나 올리에 던져야겠쥬~? 라고 생각해서 던짐 


근데 사진과 같은 오류가 뜸 ... 





뭐 ... 방법이 없잔슴 ..구글  ㄱ ㄱ 


가보니 upx패킹이 된거라함 .. 


그래서 찾아보니 upx 언패킹 을 할 수 있는 방법이 있어서 참고했음 .. 이건 검색하면 다 나오니 검색해서 참조하길 


그래서 언패킹하니까 그림과 같이 뜸 ㅇㅇ 



이제 언패킹된 파일을 다시 올리에 던져보겠슴 


던지고 이것도 키 찾으래서 혹시나 하고 문잦열 검색해봄



근데 고~~~~~~~~~~~~~~~~~~~~~~냥 바로나와버림 .. 


ㅇㅋㅇㅋ 끝임 수고 .. !





'개인공부 > Reverse Engineering' 카테고리의 다른 글

[코드엔진] Basic RCE 01 with ida  (0) 2018.08.04
Ida로 다시 정리 시작  (0) 2018.08.03
코드엔진 Reverse-L06  (0) 2017.12.21
코드엔진 Reverse-L04  (0) 2017.12.21
코드엔진 Reverse-L03  (0) 2017.12.21

4번문제임 


문제는 "이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가" 이다 .. 


그럼 먼저 디버거를 탐지하는 함수가 뭐인지 알아봐야 할 것 같아서 검색을 좀 해봤음  


많더라 ㅇㅇ 개 많음.. 대강 한번 훑어보고 사용된 api 보려고 검색을 해봤음 


아 왜 사용된 api를 보려했냐면 어쨋든 디버깅되고 있는지 아닌지 판별하려면 무슨 함수가 필요가 필요할꺼 아님 ? 그래서 어떤 api가 사용됬나보려는거임 


그래서 Search for - > all intermodular calls 를 들어가서 보니까 바로 있음ㅋ




저기로 들어가서 바로 브레이크 포인트 걸고 컨트롤 에프 구 눌러서 돌려씀 .. ! 돌리니까 아래 40106D에 (JE임) 점프문을 지나 점프할때 마다 디버깅 당함이 출력됨을 확인했음



그래서 그냥 간단하게 그럼 점프 안하면 되는거 아냐 ???????????? 해서 JNE 로 바꿔주니까  세상에 진짜 됨 ㅇㅇ 수고 


 



'개인공부 > Reverse Engineering' 카테고리의 다른 글

[코드엔진] Basic RCE 01 with ida  (0) 2018.08.04
Ida로 다시 정리 시작  (0) 2018.08.03
코드엔진 Reverse-L06  (0) 2017.12.21
코드엔진 Reverse-L05  (0) 2017.12.21
코드엔진 Reverse-L03  (0) 2017.12.21

3번 문제는 


비주얼베이직에서 스트링 비교함수 이름은 ? 이다 .. ! 


뭔지 몰라서 검색을 좀 해보니 StrCmp 란다. 아마 String Compare 일것이다 .. ㅇㅇ 


일단 그래서 뭐 어쩌라는건지 몰라서 파일을 올리에 던져 봤다 


던져서 F8 로 실행시켜보니까 바로 처음 call 함수 부분에서 막혀버린다. 그래서 F7로 들어가보니 끝도없다 .. 엄청 헤맸음 


내가 어딨는지도 모르겠고 .. ㅇㅇ



그래서 그냥 검색함 ㅋ 검색하니까 뭐 사진과 같이 문자열이 뜬다 .. 



처음에 생각으론 저 "Danke , das pass ..........." 저 부분으로 점프 뛰어야 겠다 라고 생각했는데.. 마땅히 점프 뛸 부분을 못찾았다


근데 보니까 위에 유니코드로 무척 키값처럼 생긴게 있어서 저거를 넣어보니까 그냥,, 되드라 ..ㅇㅇ.........허무함 



이문제는 이렇게 품 





'개인공부 > Reverse Engineering' 카테고리의 다른 글

[코드엔진] Basic RCE 01 with ida  (0) 2018.08.04
Ida로 다시 정리 시작  (0) 2018.08.03
코드엔진 Reverse-L06  (0) 2017.12.21
코드엔진 Reverse-L05  (0) 2017.12.21
코드엔진 Reverse-L04  (0) 2017.12.21

+ Recent posts