일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Win32
- 리뷰
- Visual Studio
- Desktop
- Tips프로그래밍강좌
- Windows
- 프로그래밍
- Javascript
- c#
- 이지스퍼블리싱
- tipssoft
- 백준
- 배열
- doit코틀린프로그래밍
- 문법
- CS
- c++
- 포인터
- Kotlin
- Programming
- c
- 알고리즘
- Tips강좌
- Direct2D
- 함수
- 티스토리
- VS ERROR
- 연산자
- 지식나눔강좌
- 김성엽
- Yesterday
- Today
- Total
목록All (383)
F.R.I.D.A.Y.
오늘은 scanf() 함수와 같이 입출력 함수, 문자열 함수를 다룰 때 종종 발생하는 C4996에 대해 다뤄봅니다. 원인 원래는 문제없이 컴파일되는 것이 맞지만, scanf() 등의 함수에서 발생 가능한 잠재적 문제점으로 인해 MSVC에 이 함수들을 사용하지 못하도록 강제하는 설정(SDL, Security Development Lifecycle)이 활성화되어 사용하지 못하는 것입니다. 해결 아래 두가지 방법으로 해결할 수 있습니다. Plan1. 코드 상단에 전처리 코드 작성 아래 두 줄의 코드 중, 하나만 작성하면 됩니다. #pragma warning(disable:4996) // MSVC 전처리 코드 #define _CRT_SECURE_NO_WARNINGS Plan2. 프로젝트 설정 변경 다음 방법을 ..
test를 쓰는 경우도 있고, cmp를 쓰는 경우도 있다. 비슷하면서 약간 다르다. cmp는 전자의 값에서 후자의 값을 뺀다.cmp a, b>> a - b == 0 test는 전자와 후자의 값을 비트 and 연산 한다.test a, b>> a & b == 0 때문에, test는 비트 and 특성상 양쪽의 값이 모두 0일 경우에만 0이 반환되므로 양 값을 모두 확인할 수 있다. 참고>> http://egloos.zum.com/dal4segno/v/438860
프롤로그, 에필로그 프로그램에서 함수를 사용하면 함수를 이용하기 위해 파라미터와 관련 구조를 쌓는 과정이 필요하다. 이 과정을 프롤로그, 에필로그라고 말한다. 여기서, 프롤로그는 함수 시작에서 구조를 쌓는 과정을 말하고, 에필로그는 함수의 구조를 파괴하는 것을 말한다. 스택 프레임 어떤 절차(또는 함수)의 호출에 따라 그와 관계되는 모든 데이터를 저장해두는 스택 영역. 호출된 프로그램의 프레임은 스택상에 순차 겹쳐 쌓여지고, 나중에 그 순서대로 꺼내진다. 참고>> http://pang2h.tistory.com/59>> https://terms.naver.com/entry.nhn?docId=759295&cid=50324&categoryId=50324 레지스터 문서 분할 : http://pang2h.tist..
#include main() { int x; int y; x = 10; y = x - 5; if( x > y ) { printf( "x의 값이 y보다 큽니다." ); } else { printf( "x의 값이 y보다 작습니다." ); } } 위 코드를 분석한다. 처음 IDA에 올리면 아래 코드가 나온다. 보면, 분기구문이 있으므로, if문이 있다고 보여진다. 코드를 보면 일단, 10과 5를 넣는것을 알 수 있다. (실수로 [401093]까지 블럭을 씌워야 하는데, 못했다. 귀찮아서 수정은 안함) 이 코드에서 ecx 레지스터와 스택에 들어있는 값을 비교한다. 즉, 스택에 들어있는 10과 5를 비교한다고 볼 수 있다. cmp 명령어는 결과가 -가 나오면 CF가 1로, 0이면 ZF가 1로 설정된다. 따라서 일..
어도비 제품군은 대개 잘 만들어져 있어서 타 제품이 치고 들어오는 경우가 많이 없는데, 문제는 기능은 많은데 일반 사용자들이 쓰기에 안정성이 떨어지는 프로그램이라고 생각한다. 잘 만들던 프로젝트가 어느순간 저장도 안했는데 사라져버린다던지.. 일반적으로 파일은 메타데이터를 지워버리는 식으로 파일은 없앤다. 즉, 집이 데이터이고 집주소가 눈에 보이는 파일이다. 이 집주소를 통해 데이터에 접근하는거고, 파일을 통해 해당 파일이 가리키는 데이터에 접근하는것으로 보면 된다. 램(RAM)의 경우에도 불필요한 데이터는 지워버리지 않고 무시하고 남겨둘 것으로 생각해본 결과, 어도비 제품군을 내가 만든 프로그램과 연동해서 어도비 제품군이 죽어버리면 내 프로그램이 해당 메모리를 유지하고 있다가 어도비 제품군을 다시 실행시..
콘솔 프로그램의 패스워드를 찾는 리버싱인듯 하다. 쭉 돌아보면 [9139B]에서 main을 콜한다. 이후에 값을 입력하게 되면 이 위치에서 문자열의 길이를 판단한다. 14개의 문자를 입력하면 기본적으로 [Sure ! Nice]가 나오고 프로그램이 종료된다. 단, 종료 코드는 -8이 나오므로 정상적인 패스워드는 아니라는 소리다. fake를 넣어서 이것으로 리버싱이 끝났다고 착각하도록 만들고 있다. F8을 눌러 [910DB]까지 내려오게 되면 여기서부터 데이터를 체크한다.cmp byte ptr ss: [ebp-N], N 에서 뒤에 숫자를 ASCII 변환을 해보면 다음과 같다. 즉, 이 프로그램의 패스워드는R3versE_is_FuN 이다. 이렇게 찾은 패스워드를 입력하면 프로그램은 다음과 같이 작동한다. 리버..
지식인 : https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=310707192 if문 없이 3과 가까운 값을 찾아내는 프로그램을 작성하라는 신박한 질문이 있어서 삼항연산자로 만들어봤다.
지식in : https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=310693375 질문이 올라왔길래 이전에 비슷한 걸 만들어 본 경험이 있어서 응용해서 만들어봤다. 질문자가 원하는 코드인지는 미지수.
char str1[] = "abcdefg"; char *str2 = "abcdefg"; 가끔씩, 배열과 포인터를 혼동하는 사람들이 있어서. 배열 str1은 문자열 "abcdefg"에서 각각의 문자를 수정할 수 있다. 그러나 포인터 str2 는 각각의 문자를 수정할 수 없다. 사실, 굉장히 간단한건데 기본적인 프로그램의 구조를 몰라서 생기는 문제라고 생각한다. 배열에서도, 포인터에서도 쌍따옴표로 묶은 문자열로 값을 초기화 할 수 있다. 그런데, 배열은 정확히 하면 초기화를 편하게 할 수 있도록 추가 문법을 제공한 것으로 볼 수 있다. 따라서 char str1[] = { 'a','b','c','d','e','f','g','\0' }; 일일이 대입이 되기 때문에 변경이 가능하다. 그러나 포인터에 값을 대입하는..