[.Net] .Net Framework์ ๋์ปดํ์ผ๋ฌ(Decompiler) ILSpy ๋ฐ dotPeek ์์
๋์ปดํ์ผ๋ฌ(Decompiler)
ํน์ ๋์ปดํ์ผ๋ฌ์ ๋ํด ์๊ณ ๊ณ์ ๊ฐ์? ์ ๋ ๋์ปดํ์ผ๋ฌ๋ ์๋ง๋ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ด์ง ์์๊น ์๊ฐํฉ๋๋ค. ๋์ปดํ์ผ๋ฌ๋ ๋ง ๊ทธ๋๋ก ์ญ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋ถ์ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด์ฃ . ์ ๋ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ๋ํด ๋ฐฐ์๋ณธ ์ ์ด ์๊ธฐ์, ๋์ปดํ์ผ๋ฌ์ ๋ํด์๋ ์์ง ๋ชปํ์๋๋ฐ์. C# ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ฉด์ ๋๋ผ์ด ์ฌ์ค์ ์๊ฒ ๋์์ต๋๋ค. .Net Framework๋ก ๊ฐ๋ฐ๋ ํ๋ก๊ทธ๋จ์ ILSpy ๋๋ dotPeek๊ณผ ๊ฐ์ ๋์ปดํ์ผ๋ฌ ํด์ ์ํด ์ฝ๊ฒ ์์ค ์ฝ๋๊ฐ ๋ ธ์ถ๋๋ค๋ ๊ฒ์ ๋ง์ด์ฃ . ์ด๋ ์ ๋๋ก ๋ ธ์ถ๋๋์ง๋ ๋ณธ๋ฌธ์์ ์ํ ์ฝ๋๋ฅผ ๋ง๋ค๋ฉด์ ๋ณด์ฌ๋๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ทธ๋์, ํ์ฌ C# ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋์๋ ์ค์ํ ๋ถ๋ถ์ Native C++ ์ฝ๋ ๊ตฌํ ๋ฐ C++/CLI Wrapper Class ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฒ ๊ฐ๋ฐํ๋ฉด ๋์ปดํ์ผ๋ฌ์ ์ํด ์์ค ์ฝ๋๊ฐ ๋ ธ์ถ๋์ง ์์ต๋๋ค. ์ด ๋ด์ฉ์ ์ถํ์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.
.Net Framework๋?
๊ทธ๋ผ .Net Framework์ ์ ์ ๋ฐ ํน์ง๋ค์ ๋ณด๊ฒ ์ต๋๋ค. ์ฌ์ค ๊ฐ๋ฐํ๋๋ฐ ๋ชฐ๋ผ๋ ๋ ์ ์์ง๋ง, ๋์ค์ '์ด๋ฐ ๊ฒ๋ ์์์ง'ํ๊ณ ๊ธฐ์ต์ ๋จ์ ์ ๋๋ก๋ง ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
.Net Framework๋ Windows์์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋น๋ํ๊ณ ์คํํ๊ธฐ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ ์์ํฌ์ ๋๋ค. Linux, macOS, Windows, iOS, Android ๋ฑ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ธฐ ์ํ ๊ธฐ์ ์ ๋ชจ์ ๋์ .Net ํ๋ซํผ์ ์ผ๋ถ์ด์ง์.
.Net Framework์ ๊ตฌ์กฐ์๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์์๊ฐ ์์ต๋๋ค. ๋ฐ๋ก Common Language Runtime(CLR)๊ณผ .Net Framework Class Library์ ๋๋ค.
Common Language Runtime(CLR): ์คํ์ค์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฒ๋ฆฌํ๋ ์คํ ์์ง์ ๋๋ค. ์ค๋ ๋ ๊ด๋ฆฌ, ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage collection), ์์ธ ์ฒ๋ฆฌ ๋ฑ์ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
Class Library: ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณตํต ๊ธฐ๋ฅ์ ์ํ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฌธ์์ด, ๋ ์ง, ์ซ์ ๋ฑ์ ์ ํ ๊ฐ์ ๊ฒ์ ๋๋ค. ๊ทธ ์ธ์๋ ํ์ผ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ, ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๋๋ก์ ๋ฑ์ ์ํ API๊ฐ ํฌํจ๋ฉ๋๋ค.
.Net ์ดํ๋ฆฌ์ผ์ด์ ์ C#, F# ๋๋ Visual Basic ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์์ฑ๋ฉ๋๋ค. ์ฝ๋๋ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์๋ Common Intermediate Language(CIL)๋ก ์ปดํ์ผ๋ฉ๋๋ค. ์ปดํ์ผ๋ ์ฝ๋๋ .dll ๋๋ .exe ํ์ผ ํ์ฅ๋ช ์ ๊ฐ์ง ์ด์ ๋ธ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. ์ดํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ CLR์ ์ด์ ๋ธ๋ฆฌ๋ฅผ ๊ฐ์ ธ์์ just-in-time(JIT) ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ์ค์ธ ์ปดํจํฐ์ ํน์ ์ํคํ ์ฒ์์ ์คํํ ์ ์๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๋ณํํฉ๋๋ค.
ILSpy & dotPeek๋ก ์์ค ์ฝ๋ ๋ณด๊ธฐ
๊ฐ๋จํ๊ฒ C# ์ํ ํ๋ก๊ทธ๋จ์ ์ ์ํ ํ ILSpy ๋ฐ dotPeek๋ก ์์ค ์ฝ๋๋ฅผ ์ด์ด๋ณด๋ ์์ ์ ๋ณด์ฌ๋๋ฆฌ๋ ค๊ณ ํฉ๋๋ค. ์ํ ํ๋ก๊ทธ๋จ์ ๋ฒํผ์ด ์๊ณ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํน์ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ์์ ์ ๋๋ค. ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค. ๋ฉ์์ง ๋ฐ์ค ์ธ์ ๋ณ์ ๋ช ๊ฐ๋ ์ถ๊ฐํด ๋ดค์ต๋๋ค.
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Exam_ILSpy
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("ILSpy Test Sample Code");
int a = 5, b = 10;
int sum = a + b;
}
}
}
Release ๋ชจ๋๋ก ๋น๋ํ์ฌ ์คํํ์ผ์ ์์ฑํ๊ณ , ILSpy ๋ฐ dotPeek์์ ์ด๋ค ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋์ง ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ๋ง๊ฐ๋จํฉ๋๋ค. ์์ฑ๋ exe ํ์ผ์ ๊ฐ ํด์ drag & dropํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ณด์ ๋๋ค.
ILSpy๋ก ํ์ธํด๋ณด๋ฉด ๋ฉ์์ง ๋ฐ์ค ์ฝ๋๋ ๋ณด์ด์ง๋ง, ๋ณ์๋ฅผ ์ถ๊ฐํ ์ฝ๋๋ ์ผ๋ถ ์ฌ๋ผ์ก์ต๋๋ค. ์๋ฒฝํ๊ฒ ๋ณด์ด์ง๋ ์๋๊ตฐ์.
dotPeek๋ก ํ์ธํด๋ณด๋ฉด ๋ชจ๋ ์์ค ์ฝ๋๊ฐ ์ ํํ๊ฒ ๋ณด์ ๋๋ค.
ํน์ ์ง๊ธ๊น์ง ๊ทธ๋ฅ C#์ผ๋ก ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๊ณ ๋ฆด๋ฆฌ์ฆ ํ๋ค๋ฉด ๋ค์ ํ๋ฒ ๊ณ ๋ฏผํด ๋ณด์ ์ผ ํฉ๋๋ค. ์์ค ์ฝ๋๋ฅผ ๋ฌด๋จ์ผ๋ก ๋ฏ์ด๋ณด๋ ๊ฒ์ ๋ถ๋ฒ์ด๋ผ๊ณ ํ์ง๋ง, ๋ก์ปฌ PC์์ ๋๊ฐ ์ด๋ป๊ฒ ํ๋์ง ์๊ฒ ์ต๋๊น. ๊ทธ๋์ ์ธํฐ๋ท์ ๊ฒ์ํด๋ณด๋ฉด C# ๊ฐ๋ฐ ์ ๋์ปดํ์ผ์ ์ด๋ ต๊ฒ ๊ฐ๋ฐํ๊ฑฐ๋ ์ฒ์์ ์ธ๊ธํ๋ C++/CLI๋ก Wrapping ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค. ์ถํ์๋ Native C++๋ก ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐํ๊ณ , C++/CLI๋ก Wrapper Class๋ฅผ ์์ฑํ ๋ค์, C#์์ Wrapper dll์ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋๋ฅผ ๋ฏ์ด๋ณผ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ์ต๋๋ค.
์ถ์ฒ
https://dotnet.microsoft.com/learn/dotnet/what-is-dotnet-framework
https://docs.microsoft.com/ko-kr/dotnet/framework/get-started/index#Introducing
https://ko.wikipedia.org/wiki/%EA%B3%B5%ED%86%B5_%EC%96%B8%EC%96%B4_%EB%9F%B0%ED%83%80%EC%9E%84
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[.Net] 3'rd party library๋ฅผ C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
[.Net] 3'rd party library๋ฅผ C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
2020.02.29 -
[.Net] C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
[.Net] C++/CLI๋ก C#์์ ์ฌ์ฉํ๊ธฐ ์ํ dll ๋ง๋ค๊ธฐ (์์ ํฌํจ)
2020.02.25 -
[.Net] C++/CLI ์ดํดํ๊ธฐ
[.Net] C++/CLI ์ดํดํ๊ธฐ
2020.02.22 -
[.NET] Bitmap์ ๋ณด๊ฐ ์์ด ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ
[.NET] Bitmap์ ๋ณด๊ฐ ์์ด ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ
2019.08.03