레이블이 objdump인 게시물을 표시합니다. 모든 게시물 표시
레이블이 objdump인 게시물을 표시합니다. 모든 게시물 표시

golang disassembly

# golang binary disassembly
go tool objdump -S exec_file_path

# 위 방식은 수백메가 이상의 파일을 생성하며 보기도 쉽지 않다.
# lensm 을 사용해보자.
# 설치
go install loov.dev/lensm@main

# 사용하기
# -watch  auto reload executable
# -filter filter the functions by regexp
# main(hello_world.go) 바이너리 assembly 보기
lensm -watch -filter main main

# 요렇게 창이 뜨고 소스 라인 별로 어셈블리 코드를 편하게 확인할 수 있다.

Linux 라이브러리 정보 확인 유틸 objdump, nm, ldd

# objdump 로 등의 오브젝트(라이브러리)의 정보를 확인할 수 있다.
objdump -a ./ysoftman.a

# nm 으로 오브젝트 파일의 심볼 목록을 볼 수 있다.
# (컴파일시 -g 옵션이 포함되어 있어야 함)
nm ./ysoftman.a

# ldd 로 프로그램에서 사용하는 공유 라이브러리를 확인할 수 있다.
ldd ./ysoftman.a

# mac 에선 ldd 대신 otool -L 을 사용하자
otool -L ./ysoftman.a

# assembly 코드 보기
# -c : 컴파일만하여 오브젝트 파일 생성
# -g : 소스레벨의 디버깅 정보 포함(소스 내용을 포함한다.)
g++ -c -g ysoftman.cpp

# -d : disassemble
# -S : disassembly 코드에 해당하는 소스코드 표시
objdump -dS ysoftman.o

# mac 에서는
objdump -disassemble -source ysoftman.o