MINERVA/Python 2021. 9. 7. 14:11
반응형

C/C++ 에서 사용하던 dumpcode(https://choiwonwoo.tistory.com/entry/%EB%94%94%EB%B2%84%EA%B9%85-3264-bits-dumpcodeh?category=267468) 함수를 Python에서 사용가능하게 바꾸어 보았습니다.

 

nMaxLineLen만 조절하셔서 사용하시면 됩니다.

[사용결과]

반응형
posted by choiwonwoo
:
MINERVA/Python 2021. 9. 7. 11:10
반응형

##################################
# id(x): 객체(x) 주소(address) 확인
##################################
name = 'Python'
print(f'My name is {name} and object id is {id(name)}')

# passed by Assignment!!!(추후 정리)
obj_copy = name # passed by Assignment(o) call by reference(x) call by value(x)
print(f'My name is {obj_copy} and obj_copy id is {id(obj_copy)}')

#################################################
# type(x): 객체(x) 타입(type) 확인
# immutable objects: int, float, string, tuple
# mutable objects: list, dict, set
#################################################
age = 18
colors = ('red','blue','yellow')
print(f'type is {type(name)}')
print(f'type is {type(age)}')
print(f'type is {type(colors)}')

########################################################
# len(x): x 길이(문자열) 또는 원소의 갯수(tuple,list, dic...
########################################################
print(len(name),len(colors))

##################################
# eval(x): (x) 결과를 반환
##################################
a = eval ('"hello" + "python"')
b = eval ('100+40')
c = eval ('len(colors)')
print(f'results are {a}, {b},{c}')

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2021. 9. 6. 16:34
반응형

초기 보안과 해킹을 공부할때 (예: BOF/FSB 등) 자주 사용사용하던, 32비트 dumpcode.h(initial written by ohhara)를 32비트와 64비트에서 동시 사용가능하게 업그레이드한 코드 입니다.

 

[dumpcode.h]

 

#define     MAX_LINE_LEN   (16)     //-- 출력하고자 하는 라인의 길이를 나타냅니다.

 

void printchar(unsigned char c)
{
    if (isprint(c))
        printf("%c", c);
    else
        printf(".");
}
void dumpcode(unsigned char* buff, int len)
{
    int i;
    
    for (i = 0; i < len; i++)
    {
        //-- address
        if (i % MAX_LINE_LEN == 0)
        {
            printf("0x%p  ", &buff[i]);
        }

        //-- one by one 
        printf("%02x ", buff[i]);

        //-- fulls
        if (((i % MAX_LINE_LEN) - (MAX_LINE_LEN-1)) == 0) {

            printf(" ");

            for (int j = i - (MAX_LINE_LEN-1); j <=i ; j++)
                printchar(buff[j]);

            printf("\n");
        }        

    }
    
    //-- remainer
    if (i % MAX_LINE_LEN != 0)
    {
        int j;
        //int spaces = (len - i + MAX_LINE_LEN - i % MAX_LINE_LEN) * 3 + 2;
        int spaces = (len - i + MAX_LINE_LEN - i % MAX_LINE_LEN) * 3 + 1;

        for (j = 0; j < spaces; j++)
            printf(" ");
        for (j = i - i % MAX_LINE_LEN; j < len; j++)
            printchar(buff[j]);
    }

    printf("\n");
}

 

[사용방법 및 결과]

32 bits 예제
64  bits 예제

반응형
posted by choiwonwoo
:
MINERVA/Python 2021. 9. 5. 05:19
반응형

최근 프로젝트를 완료하면서, 개인적으로 다시 한번 파이썬(Python)에 대한 정리 필요성을 느끼게 되어 해당내용을 하나씩 기록하고자 합니다.

 

프로그래밍 언어를 공부시 개인적으로 제일 먼저 친해져야 하는 명령어가 출력문이다. 그 이유는 당연히 백문이 불여일견이 듯이, 백문이 불여일타의 첫시작이 출력문이기 때문이다.

 

# 문자열(string) 출력
print('Maing M&F')

# 문자열 포매팅(string formatting): 문자열의 원하는 위치에 변수값을 출력하는 것을 의미함
# 1) % 사용(서식문자): 정수(%d), 문자열(%s), 실수(%f), 문자(%%)...
str_sample1 = 'Hello %s' % 'Python'
print(str_sample1)

str_sample2 = 'My age: %d' % 18
print(str_sample2)

number = 1004
str_sample2 = 'My happy nummber : %d' % number

gifts=['bag','money','travel']
for gitf in gifts:
print('My gift is %s' % gitf)

# 인자가 두개 이상인경우: ()를 사용
str_sample3 = 'my name is %s and age is %d' % ('M&F',18)
print(str_sample3)

## 단점: formatter에 대응되는 데이터 타입을 정확히 알아야 하고,
## 코드가 길어지면 가독성이 떨어짐

# 2) str.format 사용(Python 3이상 부터 지원)
str_sample4 = 'Python version {}'.format(3)
print(str_sample4)

str_sample5 = 'My name: {}'.format('wonwoo')
print(str_sample5)

# multiple arguments
str_sample6 = 'My name is {0} and my age is {1}'.format('wonwoo',18)
print(str_sample6)

## 단점: 긴 문자열 처리 및 여러인자 일때 너무 문자열 길이가 길어지는 느낌!

# 3) f-string(Python 3.6이상 부터 지원)
name = 'wonwoo'
str_sample7 = f'My name is {name}'
print(str_sample7)

age = 18
str_sample8 = f'My name is {name} and age is {age}'
print(str_sample8)
## 정리: f-string이 가장 직관적이다. 사용하기 쉽다. 또한 속도 면에서도 가장빠르다.

 

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2021. 9. 1. 14:30
반응형

C/C++개발 경험 관점에서, Python으로 작업을 하게 되면 제일 좋게 느껴지는 점은 자료구조(set, list, tuple 등)의 직관성입니다. (물론, C++ 에서도 지원을 하고 있지만, 상대적으로 익숙해지는 시간이 조금 더 걸리기는 한거 같다.)

그래서, 근래 프로젝트를 진행하면서 사용하게 되어 사용 용례  및 느낀점을 정리하였습니다.

 

[사용용례]

Wallet.h
Wallet.cpp

[느낀점]

OOP적인 느낌(?)과 코드의 확장성을 위해서는 tuple이 편해보인다.

하지만, 로직처리가 많은 경우, 특히 에러코드등의 처리를 위해서는 이전방식(레퍼/포인터)이 더 낳아 보이기도 함.

이부분은 같이 일하는 구성원들과의 합의(?)를 통해 코드 일관성을 유지하는게 좋아 보입니다.

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2021. 8. 30. 16:38
반응형

최근에 Javascript, Pyhon 등 다양한 언어 및 32/64bits 환경에서 동시에 작업을 진행하니, 때때로 정리가 않되는 느낌이 있어 정리를 하기위해 기록을 합니다.

 

기본적으로 32 bits와 64 bits에서의 데이타 사이즈는 아래와 같습니다.

(출처: https://www.ibm.com/docs/en/zos/2.2.0?topic=environments-ilp32-lp64-data-models-data-type-sizes)

 

하지만, Windows 64bits 환경에서는 차이가 long형의 경우 차이가 있습니다.

(참조: https://docs.microsoft.com/ko-kr/cpp/cpp/fundamental-types-cpp?view=msvc-160) 

 

 

반응형
posted by choiwonwoo
:
MINERVA/C_CPP 2021. 6. 26. 03:00
반응형

지난달부터 시작된 프로젝트에 OLE/COM를 사용할이 있어, OLEVIEWER를 실행하였더니 아래와 같은 에러가 발생했다.

(지금까지의 개발 경험으로 이런 경험은 없었는데....ㅠㅠㅠ)

그래서 너무나 간단한 문제였지만, 개발 시간을 낭비하게 되어, 다른 개발자분들과 공유하고자 합니다.

 

[oleview 위치]

oleview.exe를 싱행하게 되면 아래와 같은 에러가 발생하게 됩니다...ㅠㅠㅠ..이게 어쩐일이지???? 

윈도우 10이어서 발생하는건가???? ㅠㅠㅠ

 

[해법]

관리자 권한으로 실행하면 됩니다.

 

 

반응형
posted by choiwonwoo
:
DataBase/MySQL 2019. 7. 9. 14:37
반응형

MySQL은 Oracle과 다르게 표준으로 제공하는 Julian 지원함수가 없음

 

줄리안 날짜(Julian Day or Julian Data)

[의미]
쥴리안 일자는 1583년에 조셉 스캘리저에 의해 발명된 방법으로 7,980년 동안 그 주기가 시작하는 날로부터 특정 일자까지 경과된 일수를 말한다. 
이러한 체계의 목적은 어떤 날짜와 다른 날짜간의 차이를 정수로 표현함으로써 계산하기 쉽게 하기 위한 것이다. 
7,980년이라는 주기는 몇 가지 전통적인 시간주기(태양, 달, 및 특별한 로마의 세금주기 등)를 조합하여 공통의 배수인 7,980이라는 숫자가 도출되었다. 
쥴리안 일자의 주기는 첫 번째 날짜는 기원전 4,713년 1월 1일이며, 서기 3,268년 1월 22일에 끝나도록 되어있다. 
그 이후의 날들은 두 번째 쥴리안 일자 기간(또는 또다시 시작될 7,890일 주기)의 첫날부터 시작될 것이다. 

1998년 2월 28일의 특정한 시간에 대한 쥴리안 일자는 다음과 같이 표현된다. 

2450873.172719 

여기서 2,450,873은 쥴리안 일자의 시작으로부터 그날까지 경과된 날수를 의미하며, ".172719"는 그날의 시간을 나타낸다. 
쥴리안 일자라는 명칭이 조셉 스캘리저의 아버지인 쥴리어스 캐사르 스캘리저 때문에 붙여진 것인지, 또는 율리우스력(Julian calendar) 이후에 붙여진 것인지는 확실치 않다. 
쥴리안 일자는 천문학에서 널리 사용된다. 

컴퓨터 프로그래밍에서 일반적으로 말하는 쥴리안 일자는, 특정한 연도의 시작으로부터 경과된 일수를 의미하는 것으로, 의미가 원래에 비해 와전되었다. 
예를 들어, 이러한 용례에서 1998년 2월 28일에 대한 쥴리안 일자는 "59"가 된다.

 

-- 테스트 시간 
SELECT NOW();
-- 결과: '2019-07-09 14:00:22'

--  DATE 타입 --> CHAR 타입 변경: Julian Day
SELECT TO_DAYS(NOW())+1721060;
-- 결과: '2458674'

--  CHAR 타입 변경: Julian Day --> DATE 타입
SELECT FROM_DAYS(2458674 -1721060);
-- 결과: '2019-07-09'

-- 8시간 빼기
SELECT DATE_SUB(NOW(), INTERVAL 8 HOUR);
-- '2019-07-09 06:12:41'

SELECT TO_DAYS(DATE_SUB(NOW(), INTERVAL 8 HOUR))+1721060;
-- 결과: '2458674'

SELECT MOD(TO_DAYS(DATE_SUB(NOW(), INTERVAL 8 HOUR))+1721060, 4);
-- 결과: 2

반응형
posted by choiwonwoo
:
DataBase/MySQL 2019. 7. 9. 14:34
반응형

-- 1) DATE 타입  
SELECT NOW() FROM DUAL; 
-- 결과: '2019-07-09 14:20:34'

-- 2) DATE 타입 --> CHAR 타입 변경 
SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') FROM DUAL; 
-- 결과: '20190709142515'

SELECT DATE_FORMAT(NOW(), '%m/%d/%Y %H:%i:%s') FROM DUAL; 
-- 결과: '07/09/2019 14:24:17'

-- 3) CHAR 타입 --> DATE 타입 변경  
SELECT STR_TO_DATE('20190709142515','%Y%m%d%H%i%s') FROM DUAL; 
-- 결과: '2019-07-09 14:25:15'

SELECT STR_TO_DATE('07/09/2019 14:24:17','%m/%d/%Y %H:%i:%s') FROM DUAL; 
-- 결과: '2019-07-09 14:24:17'


-- 4) 날짜/시간 연산 

---- a) 현재 시간 
SELECT NOW() FROM DUAL; 
-- 결과: '2019-07-09 14:29:51'

---- b) 하루 더하기  
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) FROM DUAL; 
-- 결과: '2019-07-10 14:30:10'

---- c) 한시간 더하기 
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY_HOUR) FROM DUAL; 
-- 결과: '2019-07-09 15:30:49'

---- d) 1분 더하기  
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY_MINUTE) FROM DUAL; 
-- 결과: '2019-07-09 14:32:40'

---- e) 1초 더하기  
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY_SECOND) FROM DUAL; 
-- 결과: '2019-07-09 14:32:09'

반응형
posted by choiwonwoo
:
DataBase/Oracle 2019. 7. 9. 14:19
반응형

줄리안 날짜(Julian Day or Julian Data)

[의미]
쥴리안 일자는 1583년에 조셉 스캘리저에 의해 발명된 방법으로 7,980년 동안 그 주기가 시작하는 날로부터 특정 일자까지 경과된 일수를 말한다. 
이러한 체계의 목적은 어떤 날짜와 다른 날짜간의 차이를 정수로 표현함으로써 계산하기 쉽게 하기 위한 것이다. 
7,980년이라는 주기는 몇 가지 전통적인 시간주기(태양, 달, 및 특별한 로마의 세금주기 등)를 조합하여 공통의 배수인 7,980이라는 숫자가 도출되었다. 
쥴리안 일자의 주기는 첫 번째 날짜는 기원전 4,713년 1월 1일이며, 서기 3,268년 1월 22일에 끝나도록 되어있다. 
그 이후의 날들은 두 번째 쥴리안 일자 기간(또는 또다시 시작될 7,890일 주기)의 첫날부터 시작될 것이다. 

1998년 2월 28일의 특정한 시간에 대한 쥴리안 일자는 다음과 같이 표현된다. 

2450873.172719 

여기서 2,450,873은 쥴리안 일자의 시작으로부터 그날까지 경과된 날수를 의미하며, ".172719"는 그날의 시간을 나타낸다. 
쥴리안 일자라는 명칭이 조셉 스캘리저의 아버지인 쥴리어스 캐사르 스캘리저 때문에 붙여진 것인지, 또는 율리우스력(Julian calendar) 이후에 붙여진 것인지는 확실치 않다. 
쥴리안 일자는 천문학에서 널리 사용된다. 

컴퓨터 프로그래밍에서 일반적으로 말하는 쥴리안 일자는, 특정한 연도의 시작으로부터 경과된 일수를 의미하는 것으로, 의미가 원래에 비해 와전되었다. 
예를 들어, 이러한 용례에서 1998년 2월 28일에 대한 쥴리안 일자는 "59"가 된다.

 

[SQL]

-- 테스트 시간 
SELECT SYSDATE FROM DUAL;
-- 결과: 09.07.2019 12:12:45

-- DATE 타입 --> CHAR 타입 변경: Julian Day
SELECT TO_CHAR(SYSDATE,'J') FROM DUAL;  
-- 결과: 2458674 

-- 8시간 빼기
SELECT SYSDATE-8/24 FROM DUAL;
-- 결과: 09.07.2019 05:57:17

SELECT TO_CHAR(SYSDATE-8/24,'J') FROM DUAL;
-- 결과: 2458674

SELECT Mod(TO_CHAR(SYSDATE-8/24,'J'),4) FROM DUAL;
-- 결과: 2

반응형
posted by choiwonwoo
: