프로그래밍 QnA + 설치 및 활용 QnA

Reper의 이미지

프로세스마다 할당되는 스택

현재 버퍼 오버플로우를 공부하고 있습니다.

#include
#include

extern char **environ;

main(int argc, char *argv[])
{
char buffer[40];
int i;

if(argc != 2){
printf("argc must be two!\n");
exit(0);
}

for(i=0; environ[i]; i++)
memset(environ[i], 0, strlen(environ[i]));

if(argv[1][47] != '\xbf')
{
printf("stack is still your friend.\n");
exit(0);
}

mandugukbap의 이미지

gethostbyname()에서 DNS 서버 변경

gethostbyname 함수를 호출할 때 /etc/resolv.conf에서 DNS 서버의 주소를 읽어와 사용하는 것으로 알고 있습니다.

이 서버 주소를 제 프로그램 내에서 임의로 바꿀 방법이 있는지요?

ukyoukyo의 이미지

실행중인 명령어가 64비트인지, 32비트인지 어떻게 구별할 수 있을까요 ?



Linux, GCC 환경입니다.

64비트 OS를 설치했구요,

빌드는 32비트, 64비트 각각 개별 실행파일로 되게했습니다.


즉, 하나의 hello.c를 빌드하면 hello32, hello64 실행파일이 각각 만들어 집니다.
( gcc -m32, -m64 옵션을 사용했습니다 )



질문은,

프로그램 실행중에( runtime ) 프로그램 자신이 32비트인지, 64비트인지 구별하는 함수가 있을까요 ?

없다면 대략을 요령이라도 알려주심 감사하겠습니다...


실행 파일이름으로 구별하는건 파일이름을 사용자가 임의로 변경할 수 있으므로 제외하구요...


readelf 등등의 명령어를 보긴 봤는데, 도움이 안되는것 같아서요...

Tae_Wook의 이미지

전화선에 전원(48v)결선에 관해서 질문합니다.

회로_01 [ {(전화선 1) - (인덕터) - (전원 -극)}, {(전화선 2) - (접지) - (전원 +극)} ]

1. "회로_01"이 맞나요?

2. (전화선 1)와 (전화선 2)의 순서좀 알려주세요. [ {"회로_01"이 맞는경우},
{"회로_01"이 올치 않다면 "2. "질문은 취소합니다.} ]

-> * 전화선 1&2는 전화선 잭{(전화선이 아래로(몸쪽으로) 있고 금속핀 있는쪽을 기준으로), ("rj-16" 맞나요?)}
을 기준으로 커넥터에 물린 전선을 의미합니다.

-> * "회로_01"의 회로중 삽입된 인덕터는 전화선의 통신신호로 부터 전원을 보호하기 위해서 장착했읍니다.
[ (통신선로 기능사 책에 언뜻 희미하게 나와있더라구요.), {확실하지 않아서 여기에 질문합니다.} ]

-> * 전화선에 전원을 삽입(?)용도는 "용용도는 방과 방사이의 전화기 전원공급용" 입니다.

kid1402의 이미지

Event 와 CriticalSection 을 이용한 동기화 문제

8개의 스레드를 돌려 Queue 에 들어간 데이터를 처리하는 클래스가 있습니다.

즉 8개의 스레드 각각은 Queue를 Pop() 하여 데이터를 처리하고, 이때 CriticalSection을 이용하여 Queue에 대한 동기화 처리를 해줍니다. (8개의 스레드가 동시에 접근할 가능성이 있으므로)
쉽게 하기 위해 이 스레드를 PopThread라고 합니다.

다른 1개의 스레드는 같은 Queue에 처리할 데이터를 Push()합니다. 물론 이때도 Push()할 때에는 CriticalSection으로 Queue에 대한 동기화를 해줍니다. (위의 8개의 스레드가 동시에 접근하고자 하므로)
이 스레드는 PushThread 라고 합시다.

k2sguard의 이미지

공유기 내부에서 sniffing 질문입니다.

공유기 내부에 패킷 캡쳐 하는 프로그램을 심어 해당 프로그램이 특정 패킷을 잡아 서버로 보내는 프로그램입니다.

소켓은 socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL)); 으로 열었구요

특정 이더넷만 잡기 위해 옵션은 setsockopt(SOCKID, SOL_SOCKET, SO_BINDTODEVICE, "eth1", strlen("eth1") + 1);
으로 하였습니다 (옵션을 주나 안주나, 다른 이더넷을 선택하나 문제는 같습니다...)

그리고 Promiscuous Mode 설정 코드가 들어가구요 (하지만 이것도 설정 하나 안하나 문제는 같습니다.)

여기서 문제점은 공유기의 포트에 꼽혀있는 장비에서 예를들어 패킷을 10개 전송하면

제가 만든 프로그램에서는 무조건 같은 패킷을 3번씩 반복해서 잡습니다. (즉 30패킷이 잡힘)

프로그램에서 잡다한것 다빼고 소켓 recv만 해도 같은 현상이 발생하구요...
다른 sdk를 사용하는 공유기 장비에 프로그램을 넣어도 같은 문제가 발생하네요.

karikera의 이미지

데비안 리눅스, 하드를 USB 로 옮겼을 때!

질문하려고 오늘 처음

데비안 리눅스를 사용하고 있는데... 케이블 문제로 하드를 연결하지 못하게 되서, USB 외장하드로 옮겨서 부팅을 시켰어요.

USB로 부팅은 되지만.. 도중에 /dev/hda1 이 없다고 오류가 나요 ㅠㅠ

어떻게 설정을 바꾸거나 하지는 못할까요? .. ..

coathanger의 이미지

HTTP 파일 전송 및 수신 관련


안녕하세요.

HTTP로 파일전송을 하려고 합니다.
일반적으로 Client 프로그램에 http전송하는 형태로 개발하여 실제 수신하는 서버는 흔히 사용되는 IIS나 Apache를 사용하는지요?
아니면 http 파일 수신하는 서버를 자체 개발하여 운영하는지 알고 싶습니다.

그리고 만약 HTTP파일 수신 서버를 만든다고 한다며녀 HTTPS 보안통신 사용 시 공수가 많이 드는지도 알고 싶습니다.

미리 감사드립니다.

lsw2602의 이미지

visual studio 2008 에서 빌드한 library를 visual studio 2010에서 사용이 불가능 한가요?

2008로 작성된 프로젝트를 전달 받아서 2010으로 변환 후 실행파일을 빌드해서
실행을 했더니 실행 중 에러가 발생합니다. (library(dll) 파일을 링크 하는데 이게 2008에서 빌드 된 놈입니다.)
실행파일 빌드는 문제가 없는데 실행 시 에러가 나네요.
원래 그런건가요? 아주 기초적인 질문이겠지만 저에겐 어렵네요 ㅠ

에러메세지 :
응용 프로그램을 제대로 시작하지 못했습니다(0xc0150002).

답변 부탁드립니다. ㅠ

ljh30633의 이미지

동적할당이 된 문자열 sprintf로 복사후에

char *test(char *dirpath){
char *dir;
char *tmpdir;

asprintf(&dir, "%s", dirpath);

sprintf(tmpdir, "%s", dir);

free(dir);

return tmpdir;
}

예를 들어 다음과 같은 코드가 있다고 할때, asprintf함수는 내부적으로 동적 할당을 한다고 들었습니다. 그래서 사용후엔 free를 해주어야 하구요

동적할당했던 dir의 내용을 sprintf를 사용해 tmpdir 포인터 변수에 썼을 경우에

tmpdir 변수도 따로 free를 해주어야 하나요??

dir = tmpdir 이런식으로 되었을 경우에는 tmpdir을 받은 dir을 해제해주어야 하는 걸로 알고 있는데

sprintf를 사용하여 쓰기를 하였을 경우에는 어떻게 해야 하는지 했갈리네요 ㅠ

페이지

프로그래밍 QnA + 설치 및 활용 QnA 구독하기