KR102319403B1 - 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법 - Google Patents

컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법 Download PDF

Info

Publication number
KR102319403B1
KR102319403B1 KR1020190150659A KR20190150659A KR102319403B1 KR 102319403 B1 KR102319403 B1 KR 102319403B1 KR 1020190150659 A KR1020190150659 A KR 1020190150659A KR 20190150659 A KR20190150659 A KR 20190150659A KR 102319403 B1 KR102319403 B1 KR 102319403B1
Authority
KR
South Korea
Prior art keywords
node
nodes
execution speed
execution
speed
Prior art date
Application number
KR1020190150659A
Other languages
English (en)
Other versions
KR20210062438A (ko
Inventor
유승우
Original Assignee
국방과학연구소
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 국방과학연구소 filed Critical 국방과학연구소
Priority to KR1020190150659A priority Critical patent/KR102319403B1/ko
Publication of KR20210062438A publication Critical patent/KR20210062438A/ko
Application granted granted Critical
Publication of KR102319403B1 publication Critical patent/KR102319403B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3696Methods or tools to render software testable
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly

Abstract

본 발명은, 분석 대상의 바이너리 프로그램이 입력되는 입력 모듈, 상기 바이너리 프로그램에 대한 실행 속도를 출력하는 출력 모듈 및 상기 바이너리 프로그램의 실행 코드를 어셈블리어로 변환하고, 상기 어셈블리어를 구성하는 복수의 라인을 분석하여 설정된 자료 구조에 따라 상기 복수의 라인에 대응하는 복수의 노드를 연결한 후 각 노드 설정에 설정된 사용자 함수에 따라 상기 복수의 노드별 상기 실행 속도를 연산하는 프로세서를 포함하는 컴퓨터 장치를 제공한다.

Description

컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법{Computer apparatus and binary program execution speed measure method of computer apparatus}
본 발명은 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법에 관한 것으로서, 더욱 상세하게는 바이너리 프로그램을 어셈블리어로 변환하고, 사용자 함수의 설정 및 반복 수행하여 실행 속도를 측정하기 용이한 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법에 관한 것이다.
일반적인 실시간 시스템 개발 환경으로 VxWork의 경우, WorkBench와 같은 윈도우에서 개발이 가능한 도구를 제공한다.
개발자 편의를 위하여 WorkBench는 코드 작성, 컴파일, 다운로드를 한꺼번에 수행이 가능하도록 작성되어 있다.
일반적인 실시간 시스템 개발 방법으로, 개발자는 컴퓨터 장치(PC)에서 코드를 작성하고 target board에 적합하고, VxWorks에 적합한 cross compiler를 사용하여 컴퓨터 장치에서 컴파일을 수행하여 바이너리 프로그램을 생성한다.
이후에, 바이너리 프로그램은 실제 target board에 다운로드하고, target board 에서 작동 여부를 검증하는 방법을 수행한다. 위와 같은 방법은 다운로드에 시간이 많이 소요가 되며 또한 보드에서 동작하는 시간을 측정하는 번거로운 작업들이다.
개발자는 상술한 과정을 반복하여, 바이너리 프로그램의 동작여부 및 실시간 동작 여부를 검증하고 있다.
하지만, 컴퓨터 장치는 컴파일 이후에 코드가 지정한 시간만큼 수행하는지 여부를 확인할 수 없으며, 개발자의 경험에 의한 위와 같은 반복적인 작업을 수행하여야 하는 번거로움이 발생되게 된다는 문제점이 있다.
이에 따라, 컴퓨터 장치는 target board에서 다운로드한 바이너리 프로그램에서 어셈블리어를 추출하고, 실제 수행 속도를 측정할 수 있는 방법을 연구할 필요성이 있다.
본 발명의 목적은, 바이너리 프로그램을 어셈블리어로 변환하고, 사용자 함수의 설정 및 반복 수행하여 실행 속도를 측정하기 용이한 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법을 제공함에 있다.
그러나, 이러한 본 발명의 목적은 상기의 목적으로 제한되지 않으며, 언급되지 않은 또 다른 목적들은 아래의 기재로부터 명확하게 이해될 수 있을 것이다.
본 발명에 따른 컴퓨터 장치는, 분석 대상의 바이너리 프로그램이 입력되는 입력 모듈, 상기 바이너리 프로그램에 대한 실행 속도를 출력하는 출력 모듈 및 상기 바이너리 프로그램의 실행 코드를 어셈블리어로 변환하고, 상기 어셈블리어를 구성하는 복수의 라인을 분석하여 설정된 자료 구조에 따라 상기 복수의 라인에 대응하는 복수의 노드를 연결한 후 각 노드 설정에 설정된 사용자 함수에 따라 상기 복수의 노드별 상기 실행 속도를 연산하는 프로세서를 포함할 수 있다.
상기 프로세서는, 상기 바이너리 프로그램의 실행 코드를 상기 어셈블리어로 변환하는 역어셈블러, 상기 복수의 라인을 분석하여 상기 연결 리스트에 따라 상기 복수의 노드를 연결하며, 상기 사용자 함수를 설정하는 노드 분석부 및 상기 복수의 노드를 실행시켜, 상기 실행 속도를 연산하는 속도 측정부를 포함할 수 있다.
상기 역어셈블러는, 상기 바이너리 프로그램의 형식에 따라 일반적으로 사용하는 오픈소스 혹은 사용 소프트웨어들을 사용할 수 있으며, 직접 개발하여 사용할 수도 있다. 바이너리는 Linux, VxWorks등은 ELF format을 사용하고 있으며 Windows는 PE format을 사용하여 공개되어 있어 다양한 역어셈블리 프로그램을 사용할 수 있다. 널리 사용하는 W32dsm9b 또는 objdump를 포함하는 어셈블리어로 변환할 수 있다.
상기 노드 분석부는, 상기 복수의 라인에서 문자열 검색을 통해 명령어 및 데이터를 식별할 수 있다.
상기 명령어는, 예약어, 라벨(Label), 점프(jnl, jmp, jump, branch), 분기문 및 반복문을 포함하는 명령어일 수 있다. 일반적으로 어셈블리어는 명령 예약어들이 존재하며 CPU등에 따라 명령어가 일부 상이 할 수도 있다.
상기 자료 구조는, 상기 복수의 라인에 대한 자료 관리 및 실행 속도를 측정하기 위한 연결 리스트(linked list) 및 양방향 연결 리스트(double linked list)일 수 있다.
상기 노드 분석부는, 상기 복수의 라인 중 적어도 하나에 포함된 사용자 함수 설정을 설정된 사용자 함수 테이블에서 매칭되는 저장 매체의 읽기(fread)/쓰기(fwrite)에 대한 시간을 설정할 수 있다. 어셈블리어에서는 저장매체의 읽기, 쓰기를 호출하기 위해서 사용하는 명령어는 call 명령어를 사용하여 fwrite, fread을 호출한다.
상기 속도 측정부는, 상기 복수의 노드를 실행시켜, 노드별 실행 속도 및 전체 노드 실행 속도를 측정하고, 상기 노드별 실행 속도 및 상기 전체 노드 실행 속도를 포함하는 상기 실행 속도를 예측하여, 상기 출력 모듈에 출력할 수 있다.
본 발명에 따른 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법은, 바이너리 프로그램(binary program)의 실행 코드를 어셈블리어(assembly language)로 변환하는 단계, 상기 어셈블리어를 구성하는 복수의 라인 각각을 분석하고, 설정된 자료 구조에 따라 상기 복수의 라인에 대응하는 복수의 노드를 연결하는 단계, 상기 복수의 노드 각각에 대응하는 노드 설정에 저장 매체의 읽기/쓰기 시간 및 반복 횟수에 대한 사용자 함수를 설정하는 단계 및 상기 사용자 함수에 따라 상기 복수의 노드를 실행시켜, 노드별 실행 속도 및 전체 노드 실행 속도를 포함하는 실행 속도를 예측하여 출력하는 단계를 포함할 수 있다.
상기 복수의 노드를 연결하는 단계는, 상기 복수의 라인 각각을 분석하여 명령어 및 데이터를 식별하는 단계, 상기 명령어 중 라벨 명령어 및 점프 명령어에 대한 라인 인덱스를 설정하는 단계, 상기 연결 리스트에 따라 상기 복수의 노드를 연결하는 단계를 포함할 수 있다.
상기 복수의 노드 중 상기 라인 인덱스에 따라 상기 점프 명령어를 포함하는 라인은, 정방향으로 다음 노드 및 점프 노드를 연결하고, 역방향으로 이전 노드와 연결될 수 있다.
상기 사용자 함수를 설정하는 단계는, 설정된 사용자 함수 테이블을 기반으로, 상기 복수의 노드 각각에 대응하는 노드 설정에서 상기 저장 매체의 읽기/쓰기 시간 및 상기 반복 횟수를 사용자 입력에 의해 설정할 수 있다.
본 발명에 따른 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법은, 바이너리 프로그램을 역어셈블하여 어셈블리어로 변환하고, 어셈블리어를 분석하여 복수의 노드를 실행시킴으로써, 노드별 실행 속도 및 전체 노드 실행 속도를 측정함으로써, 바이너리 프로그램의 실행 속도를 측정할 수 있는 이점이 있다.
또한, 본 발명에 따른 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법은, 개발자가 반복으로 바이너리 프로그램의 다운로드 및 컴파일을 반복하지 않도록 함으로써, 편의성을 증대시킬 수 있는 이점이 있다.
아울러, 상술한 효과 이외의 다양한 효과들이 후술될 본 발명의 실시 예에 따른 상세한 설명에서 직접적 또는 암시적으로 개시될 수 있다.
도 1은 본 발명에 따른 컴퓨터 장치의 제어 구성을 나타낸 제어 블록도이다.
도 2 내지 도 6는 본 발명에 따른 컴퓨터 장치의 동작을 설명하기 위한 예시도이다.
도 7 내지 도 11는 본 발명에 따른 컴퓨터 장치의 동작방법을 나타낸 순서도이다.
하기의 설명에서는 본 발명의 실시예를 이해하는데 필요한 부분만이 설명되며, 그 이외 부분의 설명은 본 발명의 요지를 흩트리지 않도록 생략될 것이라는 것을 유의하여야 한다.
이하에서 설명되는 본 명세서 및 청구범위에 사용된 용어나 단어는 통상적이거나 사전적인 의미로 한정해서 해석되어서는 아니 되며, 발명자는 그 자신의 발명을 가장 최선의 방법으로 설명하기 위해 용어의 개념으로 적절하게 정의할 수 있다는 원칙에 입각하여 본 발명의 기술적 사상에 부합하는 의미와 개념으로 해석되어야만 한다. 따라서 본 명세서에 기재된 실시예와 도면에 도시된 구성은 본 발명의 바람직한 실시예에 불과할 뿐이고, 본 발명의 기술적 사상을 모두 대변하는 것은 아니므로, 본 출원시점에 있어서 이들을 대체할 수 있는 다양한 균등물과 변형예들이 있을 수 있음을 이해하여야 한다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예를 보다 상세하게 설명하고자 한다. 본 발명에 따른 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법은 자동차, 항공, 국방 분야 등에 활용 가능하다. 구체적으로, 제한된 시간에 정확한 처리를 할 수 있는 실시간 OS 혹은 특정시간 안에 처리를 필요로 하는 DSP(Digital Signal Processor)등을 활용하여 제어를 수행할 수 있다. 또한 소프트웨어 그 자체로도 활용이 가능하다. 특히, 국방 분야에서는 고속 제어에 필요한 Hard Real Time (경성실시간) 제품들을 주로 사용하고 있는데, 이러한 Hard Real Time 제품들에 있어, 본 발명과 같은 바이너리 프로그램 실행 속도 측정방법이 특히 중요하다.
도 1은 본 발명에 따른 컴퓨터 장치의 제어 구성을 나타낸 제어 블록도 및 도 2 내지 도 6는 본 발명에 따른 컴퓨터 장치의 동작을 설명하기 위한 예시도이다.
도 1을 참조하면, 컴퓨터 장치(100)는 입력 모듈(1), 출력 모듈(5) 및 프로세서(10)을 포함할 수 있다.
입력 모듈(1)은 프로세서(10)의 동작에 관련된 명령을 입력할 수 있으며, 설정에 관련된 명령을 입력할 수 있다.
또한, 입력 모듈(1)은 분석 대상에 해당되는 바이너리 프로그램을 외부 장치로부터 입력받을 수 있다.
출력 모듈(5)는 모니터 장치일 수 있으며, 프로세서(10)의 동작에 의해 출력되는 정보를 포함하는 영상화면을 출력할 수 있다.
또한, 출력 모듈(5)은 입력 모듈(1)과 결합될 수 있으며, 이에 한정을 두지 않는다.
프로세서(10)는 역어셈블러(110), 노드 분석부(120) 및 속도 측정부(130)를 포함할 수 있다.
역어셈블러(110)는 분석 대상에 대한 바이너리 프로그램을 역어셈블(disassemble)하여 바이너리 프로그램의 실행 코드에 대응하는 어셈블리어로 변환 생성할 수 있다.
여기서, 바이너리 프로그램의 형식은 리눅스 및 VxWorks인 경우 ELF(Executable and Linkable Format)일 수 있으며, 윈도우인 경우 PE(Portable Executable) Format 일 수 있으며, 이에 한정을 두지 않는다.
역어셈블러(110)는 바이너리 프로그램의 형식에 따라 W32dsm9b 또는 objdump를 포함하는 어셈블리어로 변환할 수 있다. 변환에 가능한 프로그램들은 다양한 일반적인 변환 어셈블러도 가능하며, 직접 개발한 역어셈블러도 가능하다.
노드 분석부(120)는 상기 어셈블리어를 분석하여 흐름 그래프(Flow graph)를 생성할 수 있다.
먼저, 노드 분석부(120)는 상기 어셈블리어를 구성하는 복수의 라인 각각을 분석할 수 있다.
여기서, 상기 복수의 라인은 복수의 어셈블리어 코드가 라인을 이루는 것을 나타냅니다.
이때, 노드 분석부(120)는 상기 복수의 라인에서 문자열 검색을 통해 명령어 및 데이터를 식별할 수 있다.
상기 명령어는 어셈블리어 코드에서 사용되는 어셈블리어 명령어이며, 예를 들어, 라벨(Label), 점프(jnl, jmp, jump, branch) 및 분기문, 반복문에 해당되는 예약 실행 명령어일 수 있으며, 데이터는 읽기/쓰기를 수행할 수 있는 어드레스일 수 있다.
여기서, 노드 분석부(120)는 라벨 및 점프 명령어가 식별되면, 라벨 및 점프 명령어에 대한 라인 인덱스(line index)를 생성할 수 있다.
예를 들어, 도 2를 참조하여 설명하면 다음과 같다.
도 2(a)는 역어셈블러(110)에서 변환한 복수의 라인으로 구성된 어셈블리어를 나타낸다.
여기서, 라인 2, 8은 라벨 명령어가 포함되며, 라인 4, 7에는 점프 명령어가 포함됨을 알 수 있다.
도 2(b)에는 도 2(a)에 나타낸 라벨 명령어 및 점프 명령어에 대한 라인 인덱스(line index)를 나타낸다.
노드 분석부(120)는 복수의 라인에 대한 명령어 및 데이터 식별이 완료되면, 복수의 라인 각각에 대응하는 복수의 노드를 설정된 자료 구조에 따라 연결할 수 있다.
여기서, 상기 자료 구조는 복수의 라인에 대한 자료 관리 및 실행 속도를 측정하기 위한 연결 리스트(linked list) 및 양방향 연결 리스트( double linked list)로 작성할 수 있다.
도 2(c)는 노드 분석부(120)에서 복수의 노드를 연결한 결과를 나타낸다.
즉, 도 2(c)는 복수의 노드 각각에 대한 next, prev 및 점프에 대하여 도 2(a) 및 도 2(b)를 참조하여 설정된 연결 리스트에 따라 복수의 노드를 연결할 수 있다.
여기서, next는 복수의 라인 각각에서 다음 라인을 나타내며, prev는 복수의 라인 각각에서 이전 라인을 나타내며, 점프는 점프 위치를 나타내는 라인임을 알 수 있다.
이후, 노드 분석부(120)는 복수의 노드 각각에 대한 속성 부분에서 사용자 함수를 설정할 수 있다.
즉, 노드 분석부(120)는 설정된 사용자 함수 테이블에서 매칭되는 저장 매체의 읽기(fread)/쓰기(fwrite)에 대한 시간을 설정할 수 있다.
여기서, 노드 분석부(120)는 복수의 노드 각각에 대한 속성 부분 중 사용자 함수 테이블에서 매칭되는 읽기/쓰기 시간을 설정할 수 있으며, 복수의 노드 중 사용자 함수가 존재하는 노드에서만 읽기/쓰기를 설정할 수 있으며, 이에 한정을 두지 않는다.
예를 들어, 노드 분석부(120)는 두번째 next가 존재하는 라인 7 및 라인 8에만 읽기/쓰기를 설정할 수 있으며, 또한 반복 횟수, 탐색 여부, Forward, Backward 등을 설정할 수 있다.
이후, 속도 측정부(130)는 노드 분석부(120)에서 연결된 복수의 노드를 실행시켜, 최단 시간 및 최장 시간을 측정할 수 있다.
여기서, 속도 측정부(130)는 도 3에 나타낸 바와 같이 복수의 노드(1 내지 9) 및 노드의 실행 여부를 나타낸 테이블을 이용하여, 복수의 노드에 대한 실행 속도를 측정할 수 있다.
현재, 도 3에 나타낸 바와 같이, 초기 상태에서는 테이블의 노드 각각의 탐색 실행 여부가 모두 'N'이며, 탐색 실행된 노드는 테이블에서 'Y'로 변경할 수 있다.
도 4는 도 3에서 최단 시간을 나타내는 흐름도이며, 테이블에서는 탐색 실행된 노드는 'Y'로 변경됨을 나타낸다.
즉, 속도 측정부(130)는 연결된 복수의 노드(1-9) 중 next의 탐색을 수행할 수 있다. 도 4에서, 속도 측정부(130)는 1번 노드(1), 2번 노드(2), 3번 노드(3), 6번 노드(6) 및 9번 노드(9)에 대하여 탐색을 수행할 수 있으며, 상술한 노드(1, 2, 3, 6, 9)에 대하여 테이블에는 'N'을 'Y'로 변경할 수 있다.
이후, 속도 측정부(130)는 1번 노드(1), 2번 노드(2), 3번 노드(3), 6번 노드(6) 및 9번 노드(9)에 대하여 탐색에 대한 실행 속도를 측정하여 기록할 수 있다.
속도 측정부(130)는 도 4의 테이블 상태에서 도 5와 같이 두번째 next에 대한 탐색을 수행할 수 있다.
먼저, 속도 측정부(130)는 두번째 next가 있는 4번 노드(4)에서 prev를 먼저 탐색할 수 있다. 즉, 4번 노드(4)에서 prev의 탐색은 2번 노드(2) 및 1번 노드(1) 순서로 탐색할 수 있다.
이후, 속도 측정부(130)는 4번 노드(4)에서 next에 대한 8번 노드(8) 및 9번 노드(9) 순서로 탐색을 수행할 수 있다.
속도 측정부(130)는 탐색에 대한 실행 속도를 측정하여 기록할 수 있다.
마지막으로, 속도 측정부(130)는 도 5의 테이블 상태에서 도 6과 같이 두번째 next에 대한 탐색을 수행할 수 있다.
속도 측정부(130)는 4번 노드(4) 외에 두번째 next가 있는 5번 노드(5)에서 prev를 먼저 탐색할 수 있다. 즉, 5번 노드(5)에서 prev의 탐색은 4번 노드(4), 2번 노드(2) 및 1번 노드(1) 순서로 탐색할 수 있다.
이후, 속도 측정부(130)는 5번 노드(5)에서 next에 대한 7번 노드(7)를 탐색할 수 있으며, 테이블의 탐색 실행여부에서 'N'이 존재하지 않을때까지 탐색을 수행할 수 있다.
속도 측정부(130)는 마지막 탐색에 대한 실행 속도를 측정하여 기록할 수 있으며, 기록된 다수의 실행 속도를 기반으로 최단 시간 및 최장 시간을 측정할 수 있다. 이와 관련하여, 가장 긴 어셈블리 Path를 판단하는 과정과 가장 긴 Path의 실행 Cycle을 속도로 변환하는 과정이 수행될 수 있다.
구체적으로, 가장 긴 어셈블리 Path를 판단하는 과정에서, 어셈블리의 반복문을 포함하여 Flow에 따라 어셈블리 라인의 숫자를 계산하여 가장 긴 Flow를 식별할 수 있다. 또한, 가장 긴 Path의 실행 Cycle을 속도로 변환하는 과정에서, 사용자 함수의 시간을 참조하여 계산을 수행할 수 있다.
이후, 속도 측정부(130)는 기록된 다수의 실행 속도를 기반으로 노드별 실행 속도 및 전체 노드 실행 속도를 측정하여 출력할 수 있다.
도 7 내지 도 11는 본 발명에 따른 컴퓨터 장치의 동작방법을 나타낸 순서도이다.
도 7을 참조하면, 컴퓨터 장치(100)의 프로세서(10)는 입력된 바이너리 프로그램의 실행 코드를 어셈블리어로 변환할 수 있다(S100).
즉, 역어셈블리어(110)는 설정된 변환 도구를 이용하여 바이너리 프로그램의 실행 코드를 어셈블리어로 변환할 수 있다.
프로세서(10)는 어셈블리어를 분석할 수 있다(S200). 이와 관련하여, 프로세서(10)는 어셈블리어의 플로우(Flow)를 분석할 수 있다(S200).
한편, 노드 분석부(120)는 상기 어셈블리어를 구성하는 복수의 라인 각각을 분석하고, 설정된 자료 구조에 따라 상기 복수의 라인에 대응하는 복수의 노드를 연결할 수 있다. 이와 관련하여, 디어셈블리(역어셈블리어) 과정을 이용하여 산출한 어셈블리 코드를 스캔하고, 자료 구조를 활용하여 어셈블리의 Flow를 분석할 수 있다. 이 과정에서, Branch, Label 등을 활용할 수 있다.
프로세서(10)는 복수의 노드 각각에 대응하는 사용자 함수를 설정하고, 사용자 함수에 따라 복수의 노드를 실행시켜 실행 속도를 측정할 수 있다(S300).
도 8은 도 7에 나타낸 어셈블리어를 분석하는 단계(200)를 자세하게 나타낸다.
도 8을 참조하면, 프로세서(10)의 노드 분석부(120)는 (S100) 단계에서 변환된 어셈블리어의 복수의 노드에서 명령어를 식별할 수 있다(S210). 이 과정은 실행 속도에 영향을 미치는 "사용자 코드"를 식별하는 단계로, 기존 예약 어셈블리가 아닌 코드는 모두 사용자 코드로 인지한다. 예를 들어, fwrite를 이용하는 Storage 등의 접근은 사용자 코드로 식별해야 한다. 한편, 분석 프로그램은 CPU별 어셈코드 및 레지스터 변수를 Look-up Table 형식으로 관리할 수 있다.
즉, 노드 분석부(120)는 라벨(Label), 점프(jnl, jmp, jump, branch) 및 분기문, 반복문에 해당되는 예약 실행 명령어들을 식별할 수 있다. 상기 예약 실행 명령어들은 프로세서(10)에 의존적이며, 미리 설정될 수 있다.
노드 분석부(120)는 복수의 노드 각각에 대한 속성 부분에서 사용자 함수를 설정할 수 있다(S220). 이와 관련하여, 임베디드 보드에서 수행속도에 가장 큰 영향을 미치는 것이 저장 매체의 read/write속도이다. 한편, 해당 fwrite 함수 호출과 관련하여, data-sheet를 참고하여 입력 모듈(10)을 통해 속도를 직접 입력할 수 있다.
이와 관련하여, 노드 분석부(120)는 설정된 사용자 함수 테이블에서 매칭되는 읽기(fread)/쓰기(fwrite)에 대한 시간을 설정할 수 있다. 이를 위해, 사용자 변수 설정 단계에서 특정 패턴에 대해서는 사용자가 입력 모듈(10)을 통해 반복 횟수를 입력할 수 있다.
이와 관련하여, 반복 구문 및 반복 branch 구문에서는 정확한 반복 횟수 파악이 어렵다는 문제점이 있다. 본 발명에서는 이러한 문제점을 해결하기 위해, 특정 패턴에 대해서는 사용자가 입력 모듈(10)을 통해 반복 횟수를 입력할 수 있다. 즉, loop 반복 횟수의 파악이 어려운 경우, 반복 횟수를 직접 입력한다. 예를 들어, Label 다음 cmp 명령어에 대하여 반복 횟수를 기재할 수 있다.
도 9은 도 8에 나타낸 명령어를 식별하는 단계(S210)를 자세하게 나타낸 도이다.
도 9를 참조하면, 노드 분석부(120)는 분기문(jnl, jmp, jump, branch)을 식별하고(S212), 분기문 지점이 정방향 또는 역방향인지 분석할 수 있다(S214).
이후, 노드 분석부(120)는 라벨 및 반복문을 식별하고(S216), 해당 구문에 대한 반복 횟수를 설정할 수 있다(S218).
도 10은 도 8에 나타낸 사용자 함수를 설정하는 단계(S220)를 자세하게 나타낸 도이다.
도 10을 참조하면, 노드 분석부(120)는 복수의 노드 각각에 대한 속성 부분에서 사용자 함수(Call) 구문을 구분하고(S222), 사용자 함수 구문에 해당되는 사용자 함수 테이블을 출력 모듈(5)에 출력할 수 있다(S224).
이후, 노드 분석부(120)는 입력 모듈(1)에 의해 입력된 사용자 함수를 설정할 수 있다(S226).
실시 예에서, 노드 분석부(120)는 (S224) 및 (S226) 단계를 설정된 사용자 함수 테이블에 따라 자동적으로 설정할 수 있으며, 이에 한정을 두지 않는다.
도 11은 도 7 내지 도 10에 나타낸 동작방법을 결합한 도이다.
도 11을 참조하면, 프로세서(10)의 역어셈블러(110)는 입력 모듈(1)에서 입력된 바이너리 프로그램의 실행 코드를 어셈블리어로 변환할 수 있다(S410).
즉, 역어셈블러(110)는 설정된 변환 도구를 이용하여 바이너리 프로그램의 실행 코드를 어셈블리어로 변환할 수 있다.
노드 분석부(120)는 상기 어셈블리어를 구성하는 복수의 라인 각각을 분석하여 명령어 및 데이터를 식별하고(S420), 설정된 자료 구조에 따라 상기 복수의 라인에 대응하는 복수의 노드를 연결할 수 있다(S430). 일반적으로 어셈블리어 라인 한 개당 한 개의 노드가 대응이 될 수 있다.
즉, 노드 분석부(120)는 상기 복수의 라인에서 문자열 검색을 통해 명령어 및 데이터를 식별할 수 있다.
상기 명령어는 어셈블리어 코드에서 사용되는 어셈블리어 명령어이며, 예를 들어, 라벨(Label), 점프(jnl, jmp, jump, branch) 및 예약 실행 명령어일 수 있으며, 데이터는 읽기/쓰기를 수행할 수 있는 어드레스일 수 있다.
여기서, 노드 분석부(120)는 라벨 및 점프 명령어가 식별되면, 라벨 및 점프 명령어에 대한 라인 인덱스(line index)를 생성할 수 있다(S440).
또한, 노드 분석부(120)는 명령어 중 예약어, 분기문 및 반복 구간 및 사용자 함수에 대한 명령어를 식별할 수 있으며, 이에 한정을 두지 않는다.
노드 분석부(120)는 복수의 노드 각각에 대응하는 노드 설정에 읽기/쓰기 및 반복 횟수에 대한 사용자 함수를 설정할 수 있다(S450).
속도 측정부(130)는 상기 사용자 함수에 따라 상기 복수의 노드를 실행시켜, 노드별 실행 속도 및 전체 노드 실행 속도를 측정한 결과를 출력할 수 있다(S460).
즉, 속도 측정부(130)는 첫번째 next 노드를 가지는 노드들의 탐색을 실행하여 탐색 실행 속도를 측정하고, 두번째 next 노드를 가지는 노드들의 탐색을 실행하여 탐색 실행 속도를 측정할 수 있다.
이후, 속도 측정부(130)는 측정된 탐색 실행 속도들을 기반으로 최단 시간 및 최장 시간을 측정할 수 있으며, 노드별 실행 속도 및 전체 노드 실행 속도를 측정하여 출력할 수 있다.
이상에서 실시 예들에 설명된 특징, 구조, 효과 등은 본 발명의 적어도 하나의 실시 예에 포함되며, 반드시 하나의 실시 예에만 한정되는 것은 아니다. 나아가, 각 실시 예에서 예시된 특징, 구조, 효과 등은 실시 예들이 속하는 분야의 통상의 지식을 가지는 자에 의해 다른 실시 예들에 대해서도 조합 또는 변형되어 실시 가능하다. 따라서 이러한 조합과 변형에 관계된 내용들은 본 발명의 범위에 포함되는 것으로 해석되어야 할 것이다.
또한, 이상에서 실시 예를 중심으로 설명하였으나 이는 단지 예시일 뿐 본 발명을 한정하는 것이 아니며, 본 발명이 속하는 분야의 통상의 지식을 가진 자라면 본 실시 예의 본질적인 특성을 벗어나지 않는 범위에서 이상에 예시되지 않은 여러가지의 변형과 응용이 가능함을 알 수 있을 것이다. 예를 들어, 실시 예에 구체적으로 나타난 각 구성 요소는 변형하여 실시할 수 있는 것이다. 그리고 이러한 변형과 응용에 관계된 차이점들은 첨부된 청구 범위에서 규정하는 본 발명의 범위에 포함되는 것으로 해석되어야 할 것이다.
1: 입력 모듈
5: 출력 모듈
10: 프로세서
110: 역어셈블러
120: 노드 분석부
130: 속도 측정부

Claims (12)

  1. 분석 대상의 바이너리 프로그램이 입력되는 입력 모듈;
    상기 바이너리 프로그램에 대한 실행 속도를 출력하는 출력 모듈; 및
    상기 바이너리 프로그램의 실행 코드를 어셈블리어로 변환하고, 상기 어셈블리어를 구성하는 복수의 라인을 분석하여 설정된 상기 복수의 라인에 대한 자료 관리 및 실행 속도를 측정하기 위한 연결 리스트(linked list) 및 양방향 연결리스트(double linked list)인 자료 구조에 따라 상기 복수의 라인에 대응하는 복수의 노드를 연결한 후 각 노드 설정에 설정된 사용자 함수에 따라 상기 복수의 노드별 상기 실행 속도를 연산하는 프로세서를 포함하고,
    상기 프로세서는
    상기 바이너리 프로그램의 실행 코드를 상기 어셈블리어로 변환하는 역어셈블러;
    상기 복수의 라인을 분석하여 상기 자료 구조에 따라 상기 복수의 노드를 연결하며, 상기 사용자 함수를 설정하는 노드 분석부; 및
    상기 복수의 노드를 실행시켜, 상기 실행 속도를 연산하는 속도 측정부를 포함하며,
    상기 복수의 라인중에서 적어도 일부는
    서로 상이한 분기문을 포함하고,
    상기 노드 분석부는
    상기 분기문이 역방향 또는 정방향인지를 분석하며,
    상기 속도 측정부는
    상기 복수의 노드의 탐색 실행 여부가 표시된 실행 테이블에 대해, 상기 실행 테이블이 포함하는 상기 복수의 노드가 모두 탐색이 실행된 경우, 탐색을 종료하며,
    상기 탐색이 종료되고, 상기 탐색이 완료된 노드의 실행 속도를 측정하는
    컴퓨터 장치.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 역어셈블러는,
    상기 바이너리 프로그램의 형식에 따라 W32dsm9b 또는 objdump를 포함하는 어셈블리어로 변환하는,
    컴퓨터 장치.
  4. 제 1 항에 있어서,
    상기 노드 분석부는,
    상기 복수의 라인에서 문자열 검색을 통해 명령어 및 데이터를 식별하는,
    컴퓨터 장치.
  5. 제 4 항에 있어서,
    상기 명령어는,
    예약어, 라벨(Label), 점프(jnl, jmp, jump, branch), 분기문 및 반복문을 포함하는 명령어인,
    컴퓨터 장치.
  6. 삭제
  7. 제 1 항에 있어서,
    상기 노드 분석부는,
    상기 복수의 라인 중 적어도 하나에 포함된 사용자 함수 설정을 설정된 사용자 함수 테이블에서 매칭되는 저장 매체의 읽기/쓰기에 대한 시간을 설정하는,
    컴퓨터 장치.
  8. 제 1 항에 있어서,
    상기 속도 측정부는,
    상기 복수의 노드를 실행시켜, 노드별 실행 속도 및 전체 노드 실행 속도를 측정하고, 상기 노드별 실행 속도 및 상기 전체 노드 실행 속도를 포함하는 상기 실행 속도를 예측하여, 상기 출력 모듈에 출력하는,
    컴퓨터 장치.
  9. 바이너리 프로그램(binary program)의 실행 코드를 어셈블리어(assembly language)로 변환하는 단계;
    상기 어셈블리어를 구성하는 복수의 라인 각각을 분석하여 명령어 및 데이터를 식별하는 단계;
    상기 명령어 중 라벨 명령어 및 점프 명령어에 대한 라인 인덱스를 설정하는 단계;
    설정된 상기 복수의 라인에 대한 자료 관리 및 실행 속도를 측정하기 위한 연결 리스트(linked list) 및 양방향 연결리스트(double linked list)인 자료 구조에 따라 상기 복수의 라인에 대응하는 복수의 노드를 연결하는 단계;
    상기 복수의 노드 각각에 대응하는 노드 설정에 저장 매체의 읽기/쓰기 시간 및 반복 횟수에 대한 사용자 함수를 설정하는 단계; 및
    상기 사용자 함수에 따라 상기 복수의 노드를 실행시켜, 노드별 실행 속도 및 전체 노드 실행 속도를 포함하는 실행 속도를 예측하여 출력하는 단계를 포함하고,
    상기 실행 속도를 예측하여 출력하는 단계는
    상기 복수의 노드의 탐색 실행 여부가 표시된 실행 테이블에 대해, 상기 실행 테이블이 포함하는 상기 복수의 노드가 모두 탐색이 실행된 경우, 탐색을 종료하며,
    상기 탐색이 종료되고, 상기 탐색이 완료된 노드의 실행 속도를 측정하며,
    상기 복수의 노드 중 상기 라인 인덱스에 따라 상기 점프 명령어를 포함하는 노드는,
    정방향으로 다음 노드 및 상기 점프 명령어에 대응되는 점프 노드와 연결되고, 역방향으로 이전 노드와 연결되는,
    컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법.
  10. 삭제
  11. 삭제
  12. 제 9 항에 있어서,
    상기 사용자 함수를 설정하는 단계는,
    설정된 사용자 함수 테이블을 기반으로, 상기 복수의 노드 각각에 대응하는 노드 설정에서 상기 저장 매체의 읽기/쓰기 시간 및 상기 반복 횟수를 사용자 입력에 의해 설정하는,
    컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법.
KR1020190150659A 2019-11-21 2019-11-21 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법 KR102319403B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190150659A KR102319403B1 (ko) 2019-11-21 2019-11-21 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190150659A KR102319403B1 (ko) 2019-11-21 2019-11-21 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법

Publications (2)

Publication Number Publication Date
KR20210062438A KR20210062438A (ko) 2021-05-31
KR102319403B1 true KR102319403B1 (ko) 2021-10-29

Family

ID=76150333

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190150659A KR102319403B1 (ko) 2019-11-21 2019-11-21 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법

Country Status (1)

Country Link
KR (1) KR102319403B1 (ko)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004070531A (ja) 2002-08-02 2004-03-04 Matsushita Electric Ind Co Ltd コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
JP2016057798A (ja) 2014-09-09 2016-04-21 三菱電機株式会社 プログラム埋め込み装置
KR101963752B1 (ko) * 2018-11-02 2019-03-29 세종대학교산학협력단 소프트웨어 취약점 분석 장치 및 방법

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6338796B1 (ja) * 2018-01-09 2018-06-06 株式会社Attc 変換装置、変換プログラム、プログラム変換方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004070531A (ja) 2002-08-02 2004-03-04 Matsushita Electric Ind Co Ltd コンパイラ用プログラム、コンパイラ装置及びコンパイル方法
JP2016057798A (ja) 2014-09-09 2016-04-21 三菱電機株式会社 プログラム埋め込み装置
KR101963752B1 (ko) * 2018-11-02 2019-03-29 세종대학교산학협력단 소프트웨어 취약점 분석 장치 및 방법

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
서용진 외, ‘소스코드와 실행코드의 상관관계 분석을 통한 최악실행시간 측정 방법’, 2016.08.*

Also Published As

Publication number Publication date
KR20210062438A (ko) 2021-05-31

Similar Documents

Publication Publication Date Title
JP7371141B2 (ja) リアルタイムデータフロープログラミング言語のためのツールおよび方法
JP6859449B2 (ja) テストケースを利用してテストを遂行する方法および装置
US10691419B2 (en) Reconstructing a high level compilable program from an instruction trace
Lee et al. Compass: A framework for automated performance modeling and prediction
US9141350B2 (en) Embedded system performance
Damouche et al. Toward a standard benchmark format and suite for floating-point analysis
JP7270764B2 (ja) 人工知能チップ検証
US20070011664A1 (en) Device and method for generating an instruction set simulator
CN102567200A (zh) 基于函数调用图的并行化安全漏洞检测方法
CN104850411A (zh) 存储系统基准评测程序生成方法及装置
KR101722856B1 (ko) 프로그래밍 언어 기반의 plc 자동 테스트 장치
Masci et al. An integrated development environment for the prototype verification system
CN111813672A (zh) 一种针对多种处理器架构的非侵入式覆盖率统计方法
KR100938489B1 (ko) Ipet기법을 이용하여 실시간 시스템의 최장수행시간을분석하는 자동화된 도구 및 방법
CN116663467B (zh) 断言等效硬件库的构建方法、装置、电子设备及存储介质
KR102319403B1 (ko) 컴퓨터 장치 및 컴퓨터 장치의 바이너리 프로그램 실행 속도 측정방법
CN110210046B (zh) 应用程序及专用指令集处理器一体化敏捷设计方法
US8370797B2 (en) Data processing apparatus, method therefor, and computer program
CN114047923A (zh) 错误代码定位方法、装置、存储介质以及电子设备
CN114647568A (zh) 自动化测试方法、装置、电子设备及可读存储介质
CN112100059A (zh) 一种c语言的指针类型分析方法
Angerer et al. An experiment comparing lifted and delayed variability-aware program analysis
Mastretti et al. VHDL quality: synthesizability, complexity and efficiency evaluation
CN116663463B (zh) 一种电路验证方法、装置、电子设备及可读存储介质
CN115795918B (zh) Fmu模型仿真调度方法、平台及电子设备

Legal Events

Date Code Title Description
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant