본문 바로가기

분류 전체보기841

ping 명령어 옵션, tracert 명령어 ping 명령어 옵션 -t : Ctrl + C 를 누르기 전까지 지속 -n count : 보낼 횟수 지정 ex. -n 100 -l size : 보낼 데이터 크기 지정 ex. -l 1500 -f : 조각화를 실행하지 않음 -l 옵션과 -f 옵션은 MTU를 확인하는 데 사용할 수 있다. MTU(Maximum Transmission Unit)란 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터 패킷 크기이고, 조각화를 하지 않는다는 건 패킷을 나누지 않고 한번에 보낸다는 뜻이다. 이더넷의 경우 MTU가 1500byte 고 IP헤더가 20byte 붙고 ICMP 헤더가 8byte 붙으니 어플리케이션이 사용할 수 있는 데이터 크기는 1472byte가 된다. 1473byte를 보내려고 하니 fragment가 필.. 2022. 10. 26.
한글 ] 글자 모양복사, 문단 모양복사, 셀 모양 복사 단축키 : Alt + C 복사 : 복사할 곳에 커서를 두고 Alt+C 붙이키 : 붙이기 할 곳에 드래그해서 블락 지정하고 Alt + C 2022. 10. 22.
한글 ] 내어쓰기와 들여쓰기 단축키 내어쓰기 : 내어쓰기 할 곳에서 마우스 커서를 위치시키고 Shift + Tab 표안에서 내어쓰기 : 내어쓰기 할 곳에서 마우스 커서를 위치시키고 Ctrl + Shift + Tab 들여쓰기 또는 내어쓰기 단축키 : Ctrl + F6, Ctrl + F5 첫 줄에 커서를 두고 Ctrl + F6 을 누르면 들여쓰기가 Ctrl + F5 를 누르면 내어쓰기가 된다. 그런데 들여쓰기는 문단모양에 들어가 pt 를 지정해 들여쓰기 하는게 좋은 것 같다. 2022. 10. 22.
C ] 빅엔디안 리틀엔디안 변환함수 구현 + 매크로 함수 작성시 주의점 htons(), htonl(), ntohs(), ntohl() 함수를 쓰지 않고 직접 구현하기 #include #define uint16_t unsigned short #define uint32_t unsigned int #define SWAP_UINT16(x) ((uint16_t)((((x) & 0xff00) >> 8) | (((x) & 0x00ff) > 24) | (((x) & 0x00ff0000) >> 8) | (((x) & 0x0000ff00) 8) & 0x00ff) + (((x) & 0x00ff) 2022. 10. 22.
x86-64 어셈블리어 어셈블리어 어셈블리 언어는 컴퓨터의 기계어와 치환되는 언어이다. 기계어가 여러 종류라면 어셈블리어도 여러 종류여야 함을 의미하며, CPU에 사용되는 ISA(명령어 집합 구조)에 따라서 IA-32, X86-64, ARM, MIPS 등 많은 종류의 어셈블리어가 존재한다. 어셈블리어 기본 구조 어셈블리의 문장은 동사에 해당하는 명령어(Operation Code, Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성된다. Opcode Operand1, Operand2 어셈블리어 명령어의 종류 데이터 이동 : mov, lea 산술 연산 (Arithmetic) : inc, dec, add, sub 논리 연산 (Logical) : and, or, xor, not 비교 (Comparison) : cmp, .. 2022. 10. 20.
한글 ] 표, 그림 캡션 위치 수정하기 표 또는 그림 오른쪽 클릭 후 개체 속성 클릭 - 여백/캡션 탭 캡션위치 선택 후 설정 2022. 10. 19.
한글 ] 그림 또는 표 캡션 번호 순서 정렬하기 (번호 밀림 해결) 그림 또는 표 선택 후 쪽 - 새번호로 시작 그림 번호 또는 표 번호 선택 후 시작 번호 입력 2022. 10. 19.
파워포인트 ] 텍스트 상자 안에 글자 크기 맞추기 텍스트 상자와 글자크기 연동하기 텍스트 상자 선택 서식 - 텍스트 효과 - 변환 - 휘기 - 사각형 텍스트 박스 우클릭 - 도형 서식 - 텍스트 옵션 - 텍스트 상자 - '도형의 텍스트 배치' 체크 해제 2022. 10. 19.
CCS ] C2000ware 다른 버전 선택하기 공식 홈페이지에 원하는 버전 다운로드 후 설치 https://www.ti.com/tool/download/C2000WARE Window - Preferences CCS - Products - Refresh 누르고 추가를 원하는 버전 선택 후 Apply 적용할 프로젝트 오른쪽 클릭하고 Properties General - Products 탭 - C2000Ware 선택 - Edit 버전 바꾸고 Apply and close 혹은 굳이 다운을 받지 않더라도 import한 프로젝트가 예전 버전 C2000Ware를 사용하고 상위 버전이 내 PC에 깔려있으면 같은 방식으로 Compatiable 버전으로 선택이 가능하다. 2022. 10. 19.
Windows ] ping 테스트 안될 때 or 한쪽만 될 때, ICMP 프로토콜 응답 허용하기 Window + I 로 설정 켜키 - 네트워크 및 인터넷 - Windows 방화벽 - 고급 설정 - 인바운드 규칙 파일 및 프린터 공유(에코 요청 - ICMPv4-In) 규칙 사용 클릭 2022. 10. 19.
gdb의 플러그인 pwndbg 설치 https://github.com/pwndbg/pwndbg GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy Exploit Development and Reverse Engineering with GDB Made Easy - GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy github.com 설치는 간단하다. ​ 위 사이트를 git clone 하고 pwndbg 폴더에 들어가 setup.sh 파일을 실행하면 설치가 된다. 그리고 디버그할 실행파일이 있는 곳으로 이동해서 gdb 명령어를 입력하면 p.. 2022. 10. 18.
19.7년 마다 돌아오는 GPS판 Y2K 버그 GPS Week Number Rollover GPS의 시간 표기는 '위크 넘버 롤오버(Week Number Rollover)’로 불리는 구조적 문제를 안고있다. GPS가 처음 등장한 1980년 당시에는 날짜를 주 단위로 계산해 기록했으며, 주 단위를 표기하는데 10비트를 할당하였기 때문에 0-1023까지 week 번호를 표기하고 1023을 넘어가면 오버플로우가 나서 0으로 돌아가게 된다. 즉, 1년은 52주니까 약 19.7년까지만 날짜를 기록하도록 설계된 것이다. 해당 오류가 처음 발생한 것은 1999년 8월이며, 다음 오류는 2019년 4월 발생했다. 오류가 발생한 경우 해결 방법은 각각 다르다. 시스템을 초기화(리셋)하는 것으로 해결되는 사례가 있고, 펌웨어를 업데이트해야만 쓸 수 있는 기기도 있다. 한편, 가장 많이 쓰는 GPS 장착 기기인 .. 2022. 10. 17.
Everything ] 네트워크 폴더 추가하는 방법 Everything 에서 도구 - 설정 색인 - 폴더 - 추가 - 추가할 네트워크 드라이브 또는 폴더 경로 선택 후 확인 용량이 크면 처음 추가시 스캔에 시간이 좀 걸릴 수 있다. 2022. 10. 13.
부동소수점 표현 IEEE 754 부동소수점 부동소수점(Floating point) 방식은 실수를 컴퓨터상에서 근사하여 표현할 때(원래 이진법으로는 십진법 소수를 정확하게 표현할 수 없다.) 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현한다. 컴퓨터에서는 고정소수점 방식보다 넓은 범위의 수를 나타낼 수 있지만 연산 속도고 비교적 느리기 때문에 별도의 전용 연산장치(FPU)를 두는 경우가 많다. 고정 소수점과 달리 정수 부분과 소수 부분의 자릿수가 일정하지 않으나 유효숫자의 자리수는 정해져 있다. IEEE 754 IEEE 754 는 컴퓨터에서 부동소수점을 표현하는 데 가장 널리 쓰이는 표준이다. IEEE 754의 부동 소수점 표현은 크게 세 .. 2022. 10. 13.
ADC (Analog-to-digital converter) https://microcontrollerslab.com/analog-to-digital-adc-converter-working/ 정의 표본화(Sampling) → 양자화(Quantization) → 부호화(Encoding) 총 3단계를 통해 아날로그(Analog) 신호를 디지털(Digital) 신호로 변환 (A/D 변환)하는 것. 즉 연속적인 analog 신호를 0과 1로 구성된 digital 신호로 변환하는 IC칩이다. 변환과정 1. 샘플링(Sampling) 시간축 방향에서 연속된 아날로그 신호의 진폭치를 일정 간격(샘플링 주기 Ts)으로 샘플을 추출하여 이산신호(discrete signal)로 변환시키는 과정 2. 양자화(Quantization) 샘플 추출한 연속적인 진폭의 신호를 특정 이산진폭값으.. 2022. 10. 12.
이산 신호와 디지털 신호 이산 신호는 연속신호를 샘플링한 신호이다. 연속 신호는 연속함수인 반면, 이산 신호는 수열이다. 이때 수열의 각 값을 샘플이라고 한다. 디지털 신호는 양자화된 신호이므로, 이산 신호는 디지털 신호와 구분되어야 한다. 다시 말하면, 이산 신호는 무한한 정밀도를 가지는 반면 디지털 신호는 8비트·16비트처럼 유한한 정밀도를 가진다. 출처 : https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%82%B0_%EC%8B%A0%ED%98%B8 2022. 10. 12.
Linux ] cat 명령어, > 리다이렉션 📝 cat 명령어 사용법 cat [옵션][파일명] 📝 파일 내용 출력하기 cat file.txt cat -n file// 행번호 표시해서 출력 cat file1 file2// 여러 파일을 연속해 출력 📝 리다이렉션 사용해 파일 만들기 cat 명령어와 > 리다이렉션 사용해 파일 만들기 cat > file// 기존에 있던 내용을 지우고 저장 cat >> file// 기존 파일 내용 뒤에 연속해 기록 치면 파일 내용을 입력할 수 있게 커서가 깜빡거린다. 내용 입력 후 엔터를 치고 Ctrl + D 를 누르면 입력한 내용이 파일에 저장이 된다. echo 명령어와 > 리다이렉션 사용해 파일 만들기 echo "Hi" > hi.txt 기타 명령어의 출력 내용을 파일에 기록하기 ll > file.txt ls -al > .. 2022. 10. 10.
Linux ] gcc -O 최적화 옵션 플래그 컴파일러의 최적화 수준을 설정 옵션 최적화수준 -O0 최적화를 수행하지 않는다. (기본값) -O1 또는 -O 코드 크기와 실행 시간을 줄이는 것을 제외한 최적화는 실행하지 않는다 -O2 메모리 공간과 속도를 희생하지 않는 범위내의 모든 최적화를 수행한다 loop unrolling과 function inlining에 대한 최적화를 수행하지 않는다 -O3 O2 최적화에 인라인 함수와 레지스터에 대한 최적화를 추가로 수행한다. -Os O2 최적화를 수행하지만 코드 크기를 증가시키는 최적화는 생략한다. -Ofast 사용이 권장되지 않는 최적화 옵션 ※ 커널 컴파일 시 최적화 옵션 -O2만 사용하는 이유 커널은 최적화된 수행 속도를 위해 의도적으로 인라인 함수를 사용하고 있다. -O3 최적화는 컴파일러가 판단해서.. 2022. 10. 9.
Linux ] gdb 디버거 사용법 -g 옵션을 넣고 컴파일 한다. gcc main.c -g -o main 컴파일 최적화 옵션은 사용하지 않는 것이 좋다. gdb 실행파일명으로 실행한다. gdb ./main 또는 gdb로 실행중인 프로세스의 식별자인 PID를 load 하는 것도 가능하다. 소스코드 보기 l : main 심볼부터 소스코드 출력 l 10: 10행을 기준으로 소스코드 출력 l - : 이전행의 소스 출력 l func: 해당 함수의 소스 출력 l file.c:func: 해당 파일의 해당 함수 부분을 출력 l file.c:10 : file.c 파일의 line 10을 기준으로 출력 set listsize 20 : l 명령의 기본 출력 코드 수를 20라인으로 설정 어셈블리 코드 보기 disas 라인/함수명 분기 jump 행번호/함수명 엔.. 2022. 10. 9.
Linux ] rm 명령어 rm (옵션) 삭제할 파일 또는 디렉토리 명 옵션 -r : 일반 파일은 그냥 지우고 디렉토리는 리렉토리 포함 하위 경로의 파일을 모두 지운다. -i : 지우기 전에 사용자의 확인을 받는다. (y/n) -f : 확인하지 않고 지운다. ex. rm -rf * 현재 디렉토리에 속한 모든 파일과 디렉토리를 물어보지 않고 삭제한다. 2022. 10. 9.
Linux ] 연속으로 명령 실행시키기 ; & && || pipe a; b : 앞의 명령어가 실패해도 다음 명령어 실행 a && b : 앞의 명령어가 성공했을 때 다음 명령어가 실행 a & b : 앞의 명령어를 백그라운드로 돌리고 동시에 뒤의 명령어를 실행 a || b : 앞의 명령어가 성공했을 때 다음 명령어 미수행, 앞의 명령어 실패 시 다음 명령어 실행 그 외 a | b : pipe, a의 수행 결과를 b가 받아서 수행 ex. cat /etc/passwd | grep mail 시스템의 계정정보가 들어있는 /etc/passwd 파일을 출력하는데 mail 이란 문자열이 들어간 라인만 필터링 tail -20 /etc/passwd | cat -n /etc/passwd 파일을 뒤에서 20줄 출력하는데 cat -n 옵션인 줄번호를 붙여 출력 2022. 10. 9.
Linux ] mv, rename 명령어 사용법, 파일명 변경, 파일 이동, 확장자 일괄 변경 📝 mv 명령어 사용 파일명 변경 mv 기존파일명 변경파일명 📝 mv 명령어 사용 파일 이동 mv 기존파일경로/기존파일명 옮길경로/변경파일명 파일이 위치를 이동하면서 파일명을 변경하는 것도 가능 📝 rename 명령어를 사용하기 위해 설치 sudo apt install rename 📝 테스트용 빈 파일 만들기 touch test1.c && touch test2.c 📝 rename 명령어 사용하여 확장자 또는 파일명 일괄 변경하기 rename 's/변경전문자열/변경후문자열/' 변경대상 rename 's/.c/.txt/' *.c rename 's/.txt/.c/' *.txt rename 's/test/TEST/' *.c 2022. 10. 9.
C ] memset 함수 구현 void *my_memset(void *s, int c, int len) { unsigned char *p = (unsigned char *)s; while (len > 0) { *p = c; p++; len--; } return (s); } #include void *my_memset(void *s, int c, int len) { unsigned char *p = (unsigned char *)s; while (len > 0) { *p = c; p++; len--; } return (s); } int main() { char str[13] = "hello world!"; for (int i = 0; str[i] != '\0'; i++) { printf("%c", str[i]); } printf("\n.. 2022. 10. 9.
VSCode ] 한글 깨짐 해결, 인코딩 자동 설정 File - Preference - Settings Text Editor - Files - Auto Guess Encoding 체크 파일을 다시 열면 인코딩이 자동 설정된다. 다른 방법 우측 하단의 UTF-8 선택 Reopen with Encoding 인코딩 설정을 바꿔 Reopen 할 수 있다. 2022. 10. 9.
TCP Flag(URG, ACK, PSH, RST, SYN, FIN) TCP(Transmission Control Protocol)는 3-WAY Handshake 방식을 통해 두 지점 간에 세션을 연결하여 통신을 시작하고 4-WAY Handshake를 통해 세션을 종료하여 통신을 종료한다. 이러한 세션 연결과 해제 이외에도 데이터를 전송하거나 거부, 세션 종료 같은 기능이 패킷의 FLAG 값에 따라 달라지게 되는데, TCP FLAG는 기본적으로 6 가지로 구성된다. FLAG 순서 : URG | ACK | PSH | RST | SYN | FIN | 각각 1비트로 TCP 세그먼트 필드 안에 CONTROL BIT 또는 FLAG BIT로 정의되어 있다. SYN(Synchronization:동기화) - S : 연결 요청 플래그 TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷 시.. 2022. 10. 5.
Wireshark ] 패킷 분석 시 유용한 필터 + local host traffic (127.0.0.1) 캡쳐 📌 프로토콜 필터 tcp udp 📌 MAC Address필터 eth.src == 00:11:22:33:44:55 eth.dst == 00:11:22:33:44:55 eth.addr == 00:11:22:33:44:55 📌 IP Address필터 ip.src == 127.0.0.1 ip.dst == 127.0.0.1 ip.addr == 127.0.0.1 📌 Port 필터 tcp.srcport == 80 tcp.dstport == 80 tcp.port == 80 📌 TCP Flag 필터 tcp.flags.syn == 1 tcp.flags.fin == 1 tcp.flags.reset == 1 📌 필터 명령어 혼합 사용 ip.addr == 192.168.0.10 and tcp.port == 80 tcp or u.. 2022. 10. 5.
STM32 ] UDP Client, lwIP Raw API 2022.10.03 - [DSP, MCU/STM32 (ARM Cortex-M)] - STM32 ] TCP Client STM32 ] TCP Client CubeMX 설정 클라이언트가 서버에게 1초마다 한번씩 데이터를 전송하게끔 하기 위해 TIM1을 쓸 예정이다. TIM1은 APB2에서 클락소스를 공급받는다. 아래 헤더파일과 소스파일을 포함한다. main.c /* Priva eteo.tistory.com 이전 글과 CubeMx 설정은 같다. 아래 헤더파일과 소스파일을 포함시킨다. 출처 : https://www.youtube.com/watch?v=Kc7OHc7JfRg&list=PLfIJKC1ud8ggZKVtytWAlOS63vifF5iJC&index=4 main.c /* Private includes ----.. 2022. 10. 3.
STM32 ] TCP Client, lwIP Raw API CubeMX 설정 클라이언트가 서버에게 1초마다 한번씩 데이터를 전송하게끔 하기 위해 TIM1을 쓸 예정이다. TIM1은 APB2에서 클락소스를 공급받는다. TIM1의 update interrupt를 enable한다. 아래 헤더파일과 소스파일을 포함한다. main.c /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "tcpClientRAW.h" /* USER CODE END Includes */ // ... /* USER CODE BEGIN PV */ extern struct netif gnetif; /* USER CODE END PV *.. 2022. 10. 3.
TCP/UDP 포트 번호 정리 일반적으로 포트 번호는 잘 알려진 포트(well-known port), 등록된 포트(registered port), 동적 포트(dynamic port) 세 가지로 나눌 수 있다. 잘 알려진 포트(well-known port)는 특정한 쓰임새를 위해서 IANA(Internet Assigned Numbers Authority)에서 할당한 TCP 및 UDP 포트 번호의 일부이다. 잘 알려진 포트(well-known port) : 0번 ~ 1023번 등록된 포트(registered port) : 1024번 ~ 49151번 동적 포트(dynamic port) : 49152번 ~ 65535번 이 번호는 강제적으로 지정된 것은 아니며, IANA의 권고안일 뿐이라서 가끔 각 포트 번호를 그대로 사용하지 않고 다른 용도.. 2022. 10. 2.
STM32 ] TCP Server, lwIP Raw API 아래 헤더파일과 소스파일을 프로젝트에 포함시킨다. STM324x9I_EVAL 공식 LwIP 예제에 포함된 파일로 tcp echo server 는 tcp client 에서 보낸걸 tcp server 가 그대로 다시 보내는 예제이다. 자세한 설명은 주석처리해두었다. main.c /* USER CODE BEGIN Includes */ #include "tcp_echoserver.h" /* USER CODE END Includes */ //... /* USER CODE BEGIN 2 */ tcp_echoserver_init(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { MX_LWIP_Process(); /*.. 2022. 10. 2.