Simple Analysis of. NET IL code

Source: Internet
Author: User
<span id="Label3"></p>first, Preface<p><p><strong>What is il?</strong></p></p><p><p>Intermediate Language (IL) Microsoft intermediate language</p></p><p><p><strong>C # code compilation process?</strong></p></p><p><p>C # source code through LC to IL code, il mainly contains some metadata and intermediate language directives;</p></p><p><p>The JIT compiler turns IL code into machine-recognized machine Code. Such as</p></p><p><p></p></p><p><p>Language compilers: either VB code or C # code will be converted to MSIL by language compiler</p></p><p><p>Function of Msil: MSIL contains some metadata and intermediate language directives</p></p><p><p>The role of the JIT Compiler: converting MSIL Intermediate language instructions to machine code according to the system environment</p></p><p><p><strong>Why are asp. NET Web sites run slower the first time, and later execute more quickly?</strong></p></p><p><p>When you run for the first Time. NET development, the CLR compiles MSIL through JIT and eventually translates to native Code that executes very fast. This can be Explained.</p></p><p><p><strong>Why should I know Il code?</strong></p></p><p><p>If you want to learn Well. Net,il is a necessary foundation, IL code is the foundation Of. NET operation, When we disagree with the result of the operation, we can see the essence through the IL code through the surface;</p></p><p><p>Il is also the basis for better understanding and understanding of the clr;</p></p><p><p>A large number of case analysis is based on il, so understanding il, is to read other People's code must be the basis, at the same time they can also get subtle improvement;</p></p>second, How to import ildasm into vs<p><p>To see IL code requires the use of the ILDASM tool, which is typically</p></p><p><p>C:\Program Files (x86) \microsoft Sdks\windows\v7.0a\bin\ildasm.exe</p></p><p><p>Import the ildasm into the VS tool for ease of use, as follows: tools-> external Tools</p></p><p><p></p></p><p><p>After the import, there are ildasm tools in the VS Tool. Later want to see the IL code more Convenient.</p></p><p><p><span style="line-height: 1.5;">Il code after ildasm (left), ildasm icon meaning (right)</span></p></p><p><p></p></p>Iii. Analysis of IL code<p><p>Before analyzing Il code, you should understand several concepts:</p></p><p><p></p></p><p><p>Managed Heap (managed heap): This is the managed heap in net, which is used to hold the reference type, which is managed by the GC (garbage collector automatically recycles);</p></p><p><p>Call Stacks: call Stack: the call stack is a list of methods in which all methods that are called at run time are saved in order of Invocation.</p></p><p><p>Evaluation stack (compute stack): each thread has its own line stacks, and any computation in IL occurs on the Evaluation stack, which is actually a stack structure. can be Push, or Pop.</p></p><p><p><strong>You can compare the Il code with the Il directive: a <span style="color: #ff0000;"><span style="color: #ff0000;">list of instructions</span></span> , step by step</strong></p></p><p><p>1. Write a simple console application in C #</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;">using</span></span><span style="color: #000000;"><span style="color: #000000;">System;</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">namespace</span></span><span style="color: #000000;"><span style="color: #000000;">ildemo{</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span><span style="color: #000000;">program <span style="color: #000000;">{</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Static</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>Main (<span style="color: #0000ff;"><span style="color: #0000ff;">string</span></span><span style="color: #000000;"><span style="color: #000000;">[] Args) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>i =<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>j =<span style="color: #800080;"><span style="color: #800080;">2</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>K =<span style="color: #800080;"><span style="color: #800080;">3</span></span><span style="color: #000000;"><span style="color: #000000;">; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>Answer = i + j +<span style="color: #000000;"><span style="color: #000000;">k; Console.WriteLine (</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">i+j+k=</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>+<span style="color: #000000;"><span style="color: #000000;">answer); Console.readkey (); } }}</span></span></pre><p><p>2. Use ILDASM to open the. exe file under the bin to view the code, the specific IL code is as follows:</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;">. Method</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Hidebysig</span></span>Static<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>Main (<span style="color: #0000ff;"><span style="color: #0000ff;">string</span></span>[] Args)<span style="color: #0000ff;"><span style="color: #0000ff;">CIL</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">managed</span></span><span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">. EntryPoint</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Code size (0x2a)</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">. Maxstack</span></span> <span style="color: #800080;"><span style="color: #800080;">2</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">. Locals</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Init</span></span>([<span style="color: #800080;"><span style="color: #800080;">0</span></span>]<span style="color: #0000ff;"><span style="color: #0000ff;">Int32</span></span><span style="color: #000000;"><span style="color: #000000;">i, [</span></span><span style="color: #800080;"><span style="color: #800080;">1</span></span>]<span style="color: #0000ff;"><span style="color: #0000ff;">Int32</span></span><span style="color: #000000;"><span style="color: #000000;">j, [</span></span><span style="color: #800080;"><span style="color: #800080;">2</span></span>]<span style="color: #0000ff;"><span style="color: #0000ff;">Int32</span></span><span style="color: #000000;"><span style="color: #000000;">k, [</span></span><span style="color: #800080;"><span style="color: #800080;">3</span></span>]<span style="color: #0000ff;"><span style="color: #0000ff;">Int32</span></span><span style="color: #000000;"><span style="color: #000000;">Answer)</span></span><span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0000:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">NOP</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0001:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldc.i4.1</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0002:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">stloc.0</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0003:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldc.i4.2</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0004:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">stloc.1</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0005:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldc.i4.3</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0006:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Stloc.2</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0007:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldloc.0</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0008:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Ldloc.1</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0009:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Add</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">Il_000a:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Ldloc.2</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_000b:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Add</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_000c:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">stloc.3</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_000d:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldstr</span></span> <span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">i+j+k=</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0012:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Ldloc.3</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0013:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Box</span></span><span style="color: #000000;"><span style="color: #000000;">[mscorlib]system.int32</span></span><span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0018:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Pager</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">string</span></span>[mscorlib] System.string::concat (<span style="color: #0000ff;"><span style="color: #0000ff;">Object</span></span><span style="color: #000000;"><span style="color: #000000;">, </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Object</span></span><span style="color: #000000;"><span style="color: #000000;">) </span></span><span style="color: #ff00ff;"><span style="color: #ff00ff;">il_001d:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Pager</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>[mscorlib] System.console::writeline (<span style="color: #0000ff;"><span style="color: #0000ff;">string</span></span><span style="color: #000000;"><span style="color: #000000;">) </span></span><span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0022:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">NOP</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0023:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Pager</span></span><span style="color: #000000;"><span style="color: #000000;">valuetype [mscorlib]system.consolekeyinfo [mscorlib]system.console::readkey ()</span></span><span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0028:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Pop</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0029:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ret</span></span><span style="color: #000000;"><span style="color: #000000;">} </span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">end of Method Program::main</span></span></pre><p><p>3. Il instruction to be used:</p></p><p><p>Nop: No action</p></p><p><p>Ret: returns from the current method and pushes the return value (if Present) from the Caller's evaluation stack onto the Callee's evaluation Stack.</p></p><p><p>Call: invokes the method indicated by the method specifier Passed.</p></p><p><p>Box: Convert a value class to an object reference, which is boxing, and you know the unpacking unbox</p></p><p><p></p></p><p><p>Ldc.i4.x: pushes the value of int32 to the evaluation stack</p></p><p><p>Stloc. X: Place the value at the top of the evaluation stack at the call stack index at x</p></p><p><p>Ldloc. X: Copy the value at the call stack x to the evaluation stack</p></p><p><p>4, understand the code after the comment</p></p><pre><span style="color: #0000ff;"><span style="color: #0000ff;">. Method</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Private</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Hidebysig</span></span>Static<span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>Main (<span style="color: #0000ff;"><span style="color: #0000ff;">string</span></span>[] Args)<span style="color: #0000ff;"><span style="color: #0000ff;">CIL</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">managed</span></span><span style="color: #000000;"><span style="color: #000000;">{ </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">. EntryPoint</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Program Entry</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Code size (0x2a)</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">. Maxstack</span></span> <span style="color: #800080;"><span style="color: #800080;">2</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">calculate the number of values that can be stored in the calculation stack</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">. Locals</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Init</span></span>([<span style="color: #800080;"><span style="color: #800080;">0</span></span>]<span style="color: #0000ff;"><span style="color: #0000ff;">Int32</span></span><span style="color: #000000;"><span style="color: #000000;">i, [</span></span><span style="color: #800080;"><span style="color: #800080;">1</span></span>]<span style="color: #0000ff;"><span style="color: #0000ff;">Int32</span></span><span style="color: #000000;"><span style="color: #000000;">j, [</span></span><span style="color: #800080;"><span style="color: #800080;">2</span></span>]<span style="color: #0000ff;"><span style="color: #0000ff;">Int32</span></span><span style="color: #000000;"><span style="color: #000000;">k, [</span></span><span style="color: #800080;"><span style="color: #800080;">3</span></span>]<span style="color: #0000ff;"><span style="color: #0000ff;">Int32</span></span>Answer<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">define the I,j,k,answer of the Int32 type</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0000:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">NOP</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">No action</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0001:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldc.i4.1</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">put <span style="color: #008000;">the value of I on the evaluation stack</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0002:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">stloc.0</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">Place the value at the <span style="color: #008000;">top of the evaluation stack (the value of I) at the call stack index 0</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0003:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldc.i4.2</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">Put the <span style="color: #008000;">value of J on the evaluation stack</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0004:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">stloc.1</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">Place the value at the <span style="color: #008000;">top of the evaluation stack (the value of j) at the call stack index 1</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0005:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldc.i4.3</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">put <span style="color: #008000;">the value of K on the evaluation stack</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0006:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Stloc.2</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">Place the value at the <span style="color: #008000;">top of the evaluation stack (the value of k) at the call stack index 2</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0007:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldloc.0</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Copy the value of the call stack index at 0 to the evaluation stack</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0008:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Ldloc.1</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Copy the value of the call stack index at 1 to the evaluation stack</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0009:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Add</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Add</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">Il_000a:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Ldloc.2</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Copy the value of the call stack index at 2 to the evaluation stack</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_000b:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Add</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Add</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_000c:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">stloc.3</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;">Place the value at the <span style="color: #008000;">top of the evaluation stack (the value of add) at the call stack index 3</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_000d:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ldstr</span></span> <span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #800000;"><span style="color: #800000;">i+j+k=</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">pushes a new object reference to a string stored in Metadata. </span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0012:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Ldloc.3</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Copy the value of the call stack index at 3 to the evaluation stack</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0013:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Box</span></span>[mscorlib] System.Int32<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Packing</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0018:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Pager</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">string</span></span>[mscorlib] System.string::concat (<span style="color: #0000ff;"><span style="color: #0000ff;">Object</span></span>,<span style="color: #0000ff;"><span style="color: #0000ff;">Object</span></span>)<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Calling internal methods</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_001d:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Pager</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">void</span></span>[mscorlib] System.console::writeline (<span style="color: #0000ff;"><span style="color: #0000ff;">string</span></span>)<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Call WriteLine</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0022:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">NOP</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">No action</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0023:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Pager</span></span>ValueType [mscorlib]system.consolekeyinfo [mscorlib]system.console::readkey ()<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">Call Consolekey</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0028:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">Pop</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">No action</span></span> <span style="color: #ff00ff;"><span style="color: #ff00ff;">il_0029:</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">ret</span></span> <span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">return</span></span>}<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">end of Method Program::main</span></span></pre>Iv. final<p><p>Il is to share with my senior Architecture manager and blog Park related to the blog learning summary, the last 2 questions, but also my senior architecture manager to share the two fun issues mentioned, but also can see the degree of control of IL</p></p><p><p></p></p><p><p>The answer is subsequently announced.</p></p><p><p></p></p><p><p>Simple Analysis of. NET IL code</p></p></span>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.