<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1991064452605375718</id><updated>2026-01-31T19:38:00.146-08:00</updated><category term="ARM"/><category term="Embedded System"/><category term="Operating System"/><category term="Linux"/><category term="Generic"/><category term="Process Management"/><category term="Binary Hacking"/><category term="Ethical Hacking"/><category term="Languages"/><category term="Application"/><category term="IoT"/><category term="Protocols"/><category term="Arduino"/><category term="Raspberry Pi"/><title type='text'>LinuxBaya</title><subtitle type='html'>This blog posting technical concepts on various topics like ethical hacking, ARM, software installation on Linux environment, Raspberry Pi, Arduino, Embedded Linux, docker, container, networking and etc. in a simple and described way.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.linuxbaya.in/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-2476739180652586655</id><published>2025-05-07T23:31:00.000-07:00</published><updated>2025-06-04T10:19:51.681-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Languages"/><title type='text'>Common Security Flaws in C and C++</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In this post, we’ll walk through some of the most common and dangerous security flaws in C and C++ programming:&amp;nbsp;&lt;strong data-end=&quot;753&quot; data-start=&quot;714&quot;&gt;buffer overflows, integer overflows&lt;/strong&gt;,&amp;nbsp;&lt;strong data-end=&quot;792&quot; data-start=&quot;759&quot;&gt;format string vulnerabilities and&amp;nbsp;&lt;/strong&gt;&lt;strong data-end=&quot;4407&quot; data-start=&quot;4376&quot;&gt;massive 25+ point checklist&lt;/strong&gt;&amp;nbsp;of potential C/C++ vulnerabilities. Understanding these issues is the first step toward writing safer and more secure code.&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p data-end=&quot;881&quot; data-start=&quot;602&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;881&quot; data-start=&quot;602&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiCIv2NfLU2dZV6BlagOt107yhNbbJvAjp0Z4Yi_7qUCR5M3OefCnVVhOWXR6pYdjF9Q-7rbNCvZIAa_L5vaBHuKovHJia-0UEJ-jXH6wDKT8k3ytXu0aLgxIbODKm--wzB4LlYKyzJsnleFvFtPl2uf1bQSmEc8d-S-ZRzH8ymYfbUNp2M8eXNZAoBrBw=s1600&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;Common-Security-Flaws-in-C-and-C++&quot; border=&quot;0&quot; data-original-height=&quot;1095&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiCIv2NfLU2dZV6BlagOt107yhNbbJvAjp0Z4Yi_7qUCR5M3OefCnVVhOWXR6pYdjF9Q-7rbNCvZIAa_L5vaBHuKovHJia-0UEJ-jXH6wDKT8k3ytXu0aLgxIbODKm--wzB4LlYKyzJsnleFvFtPl2uf1bQSmEc8d-S-ZRzH8ymYfbUNp2M8eXNZAoBrBw=s16000&quot; title=&quot;Security-issues-in-C-and-C++&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p data-end=&quot;4492&quot; data-start=&quot;4459&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Buffer Overflows (Stack &amp;amp; Heap)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Integer Overflows&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Uncontrolled Format String Vulnerabilities&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Use-After-Free&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Memory Leaks&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Double Free&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Uninitialized Memory&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Insecure Temp Files&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Race Conditions&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Command Injection&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Poor Error Handling&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Type Confusion&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Dangling Pointers&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Improper Bounds Checking&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Insecure Deserialization&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Volatile Keyword Misuse&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Signal Handler Vulnerabilities&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Type Conversion Issues&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;TOCTOU&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Dangerous Macros&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Unchecked Return Values&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Thread Safety Issues&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Dangerous Functions&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Environment Variable Abuse&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Stack Exhaustion&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: #0b5394; font-family: georgia; font-size: large;&quot;&gt;General Undefined Behavior&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 data-end=&quot;913&quot; data-start=&quot;888&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;1. Buffer Overflows&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;945&quot; data-start=&quot;915&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is a Buffer Overflow?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1169&quot; data-start=&quot;947&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;A&amp;nbsp;&lt;strong data-end=&quot;968&quot; data-start=&quot;949&quot;&gt;buffer overflow&lt;/strong&gt;&amp;nbsp;happens when data exceeds the boundaries of a fixed-size buffer and overwrites adjacent memory. This can cause unexpected behavior, program crashes, and even allow attackers to execute arbitrary code.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1224&quot; data-start=&quot;1171&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Buffer overflows can occur in various memory regions:&lt;/span&gt;&lt;/p&gt;&lt;strong data-end=&quot;1236&quot; data-start=&quot;1227&quot; style=&quot;text-align: justify;&quot;&gt;&lt;ul&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;li&gt;&lt;strong data-end=&quot;1236&quot; data-start=&quot;1227&quot; style=&quot;text-align: justify;&quot;&gt;Stack&lt;/strong&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;(stack-based buffer overflow)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong data-end=&quot;1277&quot; data-start=&quot;1269&quot; style=&quot;text-align: justify;&quot;&gt;Heap&lt;/strong&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;(heap-based overflow)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;strong data-end=&quot;1325&quot; data-start=&quot;1302&quot;&gt;Memory-mapped files&lt;/strong&gt;&lt;/li&gt;&lt;/span&gt;&lt;/ul&gt;&lt;/strong&gt;&lt;p data-end=&quot;1325&quot; data-start=&quot;1302&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;h3 data-end=&quot;1376&quot; data-start=&quot;1327&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Stack-Based Buffer Overflow: A Classic Attack&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1407&quot; data-start=&quot;1378&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Let’s consider this scenario:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;1533&quot; data-start=&quot;1409&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;smash_stack&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;&lt;/span&gt; *userInput) {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;char&lt;/span&gt; buffer[&lt;span class=&quot;hljs-number&quot;&gt;32&lt;/span&gt;];&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-built_in&quot;&gt;strcpy&lt;/span&gt;(buffer, userInput);  &lt;span class=&quot;hljs-comment&quot;&gt;// No bounds checking!&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;1674&quot; data-start=&quot;1535&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If&amp;nbsp;&lt;code data-end=&quot;1549&quot; data-start=&quot;1538&quot;&gt;userInput&lt;/code&gt;&amp;nbsp;is longer than 32 characters, it will overwrite memory beyond&amp;nbsp;&lt;code data-end=&quot;1620&quot; data-start=&quot;1612&quot;&gt;buffer&lt;/code&gt;, including potentially the function&#39;s return address.&lt;/span&gt;&lt;/p&gt;&lt;h4 data-end=&quot;1703&quot; data-start=&quot;1676&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why is this dangerous?&lt;/span&gt;&lt;/h4&gt;&lt;p data-end=&quot;1900&quot; data-start=&quot;1705&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;When a function is called, the system creates a&amp;nbsp;&lt;strong data-end=&quot;1768&quot; data-start=&quot;1753&quot;&gt;stack frame&lt;/strong&gt;&amp;nbsp;that contains local variables and the return address. If an attacker controls the overflow and knows the memory layout, they could:&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1968&quot; data-start=&quot;1904&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Overwrite the return address with the address of malicious code.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Hijack the execution flow of the program.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;2121&quot; data-start=&quot;2015&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;This can result in arbitrary code execution, data leaks, system crashes, or even a full system compromise.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;2153&quot; data-start=&quot;2123&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Heap-Based Buffer Overflow&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2263&quot; data-start=&quot;2155&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Unlike stack overflows,&amp;nbsp;&lt;strong data-end=&quot;2197&quot; data-start=&quot;2179&quot;&gt;heap overflows&lt;/strong&gt;&amp;nbsp;affect dynamically allocated memory. Here’s a simplified example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;2412&quot; data-start=&quot;2265&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;* buffer = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;32&lt;/span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;* secret_password = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;32&lt;/span&gt;];&lt;/div&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;strcpy&lt;/span&gt;(secret_password, &lt;span class=&quot;hljs-string&quot;&gt;&quot;password&quot;&lt;/span&gt;);&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;strcpy&lt;/span&gt;(buffer, long_user_input);&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;2538&quot; data-start=&quot;2414&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If&amp;nbsp;&lt;code data-end=&quot;2434&quot; data-start=&quot;2417&quot;&gt;long_user_input&lt;/code&gt;&amp;nbsp;is larger than 32 characters, it overflows into&amp;nbsp;&lt;code data-end=&quot;2500&quot; data-start=&quot;2483&quot;&gt;secret_password&lt;/code&gt;, potentially altering sensitive data.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;2749&quot; data-start=&quot;2540&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;While heap overflows are typically less dangerous in terms of executing shellcode, they can still lead to security breaches—especially if critical values like authentication tokens or pointers are overwritten.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;2787&quot; data-start=&quot;2751&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;How to Prevent Buffer Overflows:&lt;/span&gt;&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Always validate input sizes.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use safer functions like&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2855&quot; data-start=&quot;2846&quot; style=&quot;text-align: justify;&quot;&gt;strncpy&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2867&quot; data-start=&quot;2857&quot; style=&quot;text-align: justify;&quot;&gt;snprintf&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, or modern C++ constructs like&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2912&quot; data-start=&quot;2899&quot; style=&quot;text-align: justify;&quot;&gt;std::string&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Enable compiler protections like stack canaries.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Take advantage of OS-level defenses like&amp;nbsp;&lt;strong data-end=&quot;3016&quot; data-start=&quot;3008&quot;&gt;ASLR&lt;/strong&gt;&amp;nbsp;and&amp;nbsp;&lt;strong data-end=&quot;3046&quot; data-start=&quot;3021&quot;&gt;non-executable stacks&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;3047&quot; data-start=&quot;2967&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul data-end=&quot;3047&quot; data-start=&quot;2788&quot;&gt;&lt;/ul&gt;&lt;h2 data-end=&quot;3080&quot; data-start=&quot;3054&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3080&quot; data-start=&quot;3054&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;2. Integer Overflows&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;3114&quot; data-start=&quot;3082&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is an Integer Overflow?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3245&quot; data-start=&quot;3116&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;An&amp;nbsp;&lt;strong data-end=&quot;3139&quot; data-start=&quot;3119&quot;&gt;integer overflow&lt;/strong&gt;&amp;nbsp;occurs when a calculation results in a number outside the range that can be represented by the data type.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;3255&quot; data-start=&quot;3247&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;3323&quot; data-start=&quot;3257&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; c = INT_MAX;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;c = c + &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;  &lt;span class=&quot;hljs-comment&quot;&gt;// Wraps around to INT_MIN&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;3461&quot; data-start=&quot;3325&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The result can be surprising: instead of throwing an error, C/C++ silently wraps around the value. This leads to&amp;nbsp;&lt;strong data-end=&quot;3460&quot; data-start=&quot;3438&quot;&gt;undefined behavior&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;3489&quot; data-start=&quot;3463&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why is this a problem?&lt;/span&gt;&lt;/h3&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;An overflowed value might be used to allocate memory:&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;3323&quot; data-start=&quot;3257&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;int&lt;/span&gt; size = &lt;span class=&quot;hljs-built_in&quot;&gt;get_user_input&lt;/span&gt;();&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;char&lt;/span&gt;* buffer = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;[size];&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;It might cause infinite loops, incorrec&lt;/span&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;t bounds checking, or even allow buffer overflows if the logic assumes the value is within bounds.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;h3 data-end=&quot;3804&quot; data-start=&quot;3767&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;How to Prevent Integer Overflows:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Validate arithmetic operations before executing them.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use safer arithmetic functions or libraries with built-in overflow checks (e.g.,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;3968&quot; data-start=&quot;3944&quot; style=&quot;text-align: justify;&quot;&gt;__builtin_add_overflow&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;in GCC).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Prefer unsigned types for sizes (with caution).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Perform careful range checking when working with user input.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;4090&quot; data-start=&quot;4030&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;h2 data-end=&quot;4148&quot; data-start=&quot;4097&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4148&quot; data-start=&quot;4097&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;3. Uncontrolled Format String Vulnerabilities&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;4192&quot; data-start=&quot;4150&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is a Format String Vulnerability?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;4296&quot; data-start=&quot;4194&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;This happens when a program passes unchecked user input as a format string to functions like&amp;nbsp;&lt;code data-end=&quot;4295&quot; data-start=&quot;4287&quot;&gt;printf&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;4325&quot; data-start=&quot;4298&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Example of&amp;nbsp;&lt;strong data-end=&quot;4324&quot; data-start=&quot;4309&quot;&gt;unsafe code&lt;/strong&gt;:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;4460&quot; data-start=&quot;4327&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;white-space: normal;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;hljs-title&quot; style=&quot;white-space: normal;&quot;&gt;vulnerable_function&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;white-space: normal;&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;&amp;nbsp;*userInput) {&lt;/span&gt;    &lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;printf&lt;/span&gt;(userInput);  &lt;span class=&quot;hljs-comment&quot;&gt;// DANGER: userInput could contain format specifiers&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;4680&quot; data-start=&quot;4462&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If an attacker enters&amp;nbsp;&lt;code data-end=&quot;4494&quot; data-start=&quot;4484&quot;&gt;%x %x %x&lt;/code&gt;,&amp;nbsp;&lt;code data-end=&quot;4504&quot; data-start=&quot;4496&quot;&gt;printf&lt;/code&gt;&amp;nbsp;will print values from the stack. Even worse, using&amp;nbsp;&lt;code data-end=&quot;4561&quot; data-start=&quot;4557&quot;&gt;%n&lt;/code&gt;&amp;nbsp;allows writing to arbitrary memory locations, which can be exploited to alter program behavior or gain code execution.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;4705&quot; data-start=&quot;4682&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Safer Alternatives:&lt;/span&gt;&lt;/h3&gt;&lt;ul data-end=&quot;4906&quot; data-start=&quot;4707&quot;&gt;&lt;li data-end=&quot;4807&quot; data-start=&quot;4707&quot;&gt;&lt;p data-end=&quot;4756&quot; data-start=&quot;4709&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;4725&quot; data-start=&quot;4709&quot;&gt;Fix the code&lt;/strong&gt;&amp;nbsp;by specifying a format string:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;4807&quot; data-start=&quot;4759&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot; style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;printf&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;%s&quot;&lt;/span&gt;, userInput);  &lt;span class=&quot;hljs-comment&quot;&gt;// Safe&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li data-end=&quot;4906&quot; data-start=&quot;4808&quot;&gt;&lt;p data-end=&quot;4865&quot; data-start=&quot;4810&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;4824&quot; data-start=&quot;4810&quot;&gt;Use&amp;nbsp;&lt;code data-end=&quot;4822&quot; data-start=&quot;4816&quot;&gt;cout&lt;/code&gt;&lt;/strong&gt;&amp;nbsp;instead of&amp;nbsp;&lt;code data-end=&quot;4844&quot; data-start=&quot;4836&quot;&gt;printf&lt;/code&gt;&amp;nbsp;when working in C++:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;4906&quot; data-start=&quot;4868&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot; style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;std::cout &amp;lt;&amp;lt; userInput;
&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-end=&quot;4947&quot; data-start=&quot;4908&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;How to Avoid Format String Attacks:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Never pass user input directly as a format string.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Sanitize and validate input rigorously.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Disable risky specifiers like&amp;nbsp;&lt;code data-end=&quot;5079&quot; data-start=&quot;5075&quot;&gt;%n&lt;/code&gt;&amp;nbsp;using compiler flags or secure coding guidelines.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;5129&quot; data-start=&quot;5045&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;290&quot; data-start=&quot;0&quot;&gt;&lt;/p&gt;&lt;h2 data-end=&quot;320&quot; data-start=&quot;297&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;4. Use-After-Free&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;337&quot; data-start=&quot;322&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;458&quot; data-start=&quot;339&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;363&quot; data-start=&quot;339&quot;&gt;Use-After-Free (UAF)&lt;/strong&gt;&amp;nbsp;occurs when a program continues to use a pointer after the memory it points to has been freed.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;575&quot; data-start=&quot;460&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;* buffer = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;100&lt;/span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;delete&lt;/span&gt;[] buffer;&lt;/div&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;strcpy&lt;/span&gt;(buffer, &lt;span class=&quot;hljs-string&quot;&gt;&quot;This is unsafe!&quot;&lt;/span&gt;);  &lt;span class=&quot;hljs-comment&quot;&gt;// Using freed memory&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;596&quot; data-start=&quot;577&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why it matters:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;773&quot; data-start=&quot;675&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Can lead to undefined behavior, crashes, or execution of malicious code.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Attackers may exploit UAF to control program behavior by reallocating memory in the same location.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;797&quot; data-start=&quot;775&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;How to prevent it:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;940&quot; data-start=&quot;851&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Always set pointers to&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;833&quot; data-start=&quot;824&quot; style=&quot;text-align: justify;&quot;&gt;nullptr&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;after freeing.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use smart pointers (&lt;code data-end=&quot;888&quot; data-start=&quot;871&quot;&gt;std::unique_ptr&lt;/code&gt;,&amp;nbsp;&lt;code data-end=&quot;907&quot; data-start=&quot;890&quot;&gt;std::shared_ptr&lt;/code&gt;) to manage memory automatically.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;967&quot; data-start=&quot;946&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;967&quot; data-start=&quot;946&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;5. Memory Leaks&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;984&quot; data-start=&quot;969&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1059&quot; data-start=&quot;986&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Memory that is allocated but never deallocated leads to&amp;nbsp;&lt;strong data-end=&quot;1058&quot; data-start=&quot;1042&quot;&gt;memory leaks&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;1128&quot; data-start=&quot;1061&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;* buffer = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;256&lt;/span&gt;];&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// Forgot to call delete[]&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;1149&quot; data-start=&quot;1130&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why it matters:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1289&quot; data-start=&quot;1196&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Causes increased memory usage over time.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In long-running systems, can lead to slowdowns or crashes due to exhaustion of system memory.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;1306&quot; data-start=&quot;1291&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Prevention:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Use RAII (Resource Acquisition Is Initialization) with smart pointers.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Always pair&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1400&quot; data-start=&quot;1395&quot; style=&quot;text-align: justify;&quot;&gt;new&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;with&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1414&quot; data-start=&quot;1406&quot; style=&quot;text-align: justify;&quot;&gt;delete&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, and&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1427&quot; data-start=&quot;1420&quot; style=&quot;text-align: justify;&quot;&gt;new[]&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;with&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1443&quot; data-start=&quot;1433&quot; style=&quot;text-align: justify;&quot;&gt;delete[]&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use tools like&amp;nbsp;&lt;strong data-end=&quot;1474&quot; data-start=&quot;1462&quot;&gt;Valgrind&lt;/strong&gt;&amp;nbsp;or&amp;nbsp;&lt;strong data-end=&quot;1486&quot; data-start=&quot;1478&quot;&gt;ASan&lt;/strong&gt;&amp;nbsp;(Address Sanitizer) to detect leaks.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;1523&quot; data-start=&quot;1447&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;h2 data-end=&quot;1550&quot; data-start=&quot;1530&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;1550&quot; data-start=&quot;1530&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;6. Double Free&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;1567&quot; data-start=&quot;1552&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1638&quot; data-start=&quot;1569&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Calling&amp;nbsp;&lt;code data-end=&quot;1585&quot; data-start=&quot;1577&quot;&gt;delete&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code data-end=&quot;1597&quot; data-start=&quot;1589&quot;&gt;free()&lt;/code&gt;&amp;nbsp;on the same memory block more than once.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;1722&quot; data-start=&quot;1640&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary select-none rounded-t-[5px]&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;* data = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;[&lt;span class=&quot;hljs-number&quot;&gt;50&lt;/span&gt;];&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;delete&lt;/span&gt;[] data;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;delete&lt;/span&gt;[] data;  &lt;span class=&quot;hljs-comment&quot;&gt;// Dangerous!&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;1734&quot; data-start=&quot;1724&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risks:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1840&quot; data-start=&quot;1762&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;May corrupt the heap.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Can be exploited to gain control over the heap metadata in certain allocators.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;1850&quot; data-start=&quot;1842&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Set pointers to&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1879&quot; data-start=&quot;1870&quot; style=&quot;text-align: justify;&quot;&gt;nullptr&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;immediately after deletion.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-end=&quot;1949&quot; data-start=&quot;1913&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;1949&quot; data-start=&quot;1913&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;7. Uninitialized Memory Access&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;1966&quot; data-start=&quot;1951&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2023&quot; data-start=&quot;1968&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Using variables or memory that hasn’t been initialized.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;2076&quot; data-start=&quot;2025&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; a;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;cout &amp;lt;&amp;lt; a;  &lt;span class=&quot;hljs-comment&quot;&gt;// Value is undefined&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;2097&quot; data-start=&quot;2078&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why it matters:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2212&quot; data-start=&quot;2136&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Leads to unpredictable behavior.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Might leak sensitive data left in memory from other processes or operations.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;2229&quot; data-start=&quot;2214&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Prevention:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2353&quot; data-start=&quot;2275&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Always initialize variables before use.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use tools like Valgrind or compiler flags like&amp;nbsp;&lt;code data-end=&quot;2339&quot; data-start=&quot;2322&quot;&gt;-Wuninitialized&lt;/code&gt;&amp;nbsp;to detect it.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;2393&quot; data-start=&quot;2360&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2393&quot; data-start=&quot;2360&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;8. Insecure Temporary Files&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;2410&quot; data-start=&quot;2395&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2538&quot; data-start=&quot;2412&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Creating predictable temp file names can allow attackers to create files with those names in advance (race condition attacks).&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;2591&quot; data-start=&quot;2540&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot; style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;FILE* f = &lt;span class=&quot;hljs-built_in&quot;&gt;fopen&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;/tmp/mytempfile&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;w&quot;&lt;/span&gt;);
&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;2602&quot; data-start=&quot;2593&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risk:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Attackers can create symbolic links to redirect writes to other files.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-end=&quot;2686&quot; data-start=&quot;2678&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2705&quot; data-start=&quot;2694&quot; style=&quot;text-align: justify;&quot;&gt;mkstemp()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;instead of&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2727&quot; data-start=&quot;2717&quot; style=&quot;text-align: justify;&quot;&gt;tmpnam()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;or hardcoded paths.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-end=&quot;2777&quot; data-start=&quot;2753&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2777&quot; data-start=&quot;2753&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;9. Race Conditions&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;2794&quot; data-start=&quot;2779&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2906&quot; data-start=&quot;2796&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;When two threads/processes access shared data simultaneously and the result depends on the sequence of access.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;2917&quot; data-start=&quot;2908&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risk:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3054&quot; data-start=&quot;2955&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Can lead to unpredictable bugs.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Security implications if the race condition affects authentication, permissions, or data integrity.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;3068&quot; data-start=&quot;3056&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Example:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Time-of-check to time-of-use (TOCTOU) vulnerabilities in file handling.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-end=&quot;3206&quot; data-start=&quot;3150&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3206&quot; data-start=&quot;3150&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;10. Command Injection via&amp;nbsp;&lt;code data-end=&quot;3193&quot; data-start=&quot;3183&quot;&gt;system()&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code data-end=&quot;3206&quot; data-start=&quot;3197&quot;&gt;popen()&lt;/code&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;3223&quot; data-start=&quot;3208&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3276&quot; data-start=&quot;3225&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Passing unsanitized input to system-level commands.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;3341&quot; data-start=&quot;3278&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot; style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;system&lt;/span&gt;(userInput);  &lt;span class=&quot;hljs-comment&quot;&gt;// BAD if userInput = &quot;rm -rf /&quot;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;3352&quot; data-start=&quot;3343&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risk:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3445&quot; data-start=&quot;3395&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Full command execution by attackers.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Leads to privilege escalation or data destruction.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;3455&quot; data-start=&quot;3447&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3557&quot; data-start=&quot;3499&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Avoid using&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;3481&quot; data-start=&quot;3471&quot; style=&quot;text-align: justify;&quot;&gt;system()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;when possible.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use safer APIs or at least validate/escape input properly.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;3593&quot; data-start=&quot;3564&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3593&quot; data-start=&quot;3564&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;11. Poor Error Handling&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;3610&quot; data-start=&quot;3595&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3708&quot; data-start=&quot;3612&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Ignoring or mishandling return values from critical functions (e.g.,&amp;nbsp;&lt;code data-end=&quot;3689&quot; data-start=&quot;3681&quot;&gt;malloc&lt;/code&gt;,&amp;nbsp;&lt;code data-end=&quot;3698&quot; data-start=&quot;3691&quot;&gt;fopen&lt;/code&gt;,&amp;nbsp;&lt;code data-end=&quot;3706&quot; data-start=&quot;3700&quot;&gt;read&lt;/code&gt;).&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;3729&quot; data-start=&quot;3710&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why it matters:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3832&quot; data-start=&quot;3792&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Can lead to null pointer dereferences or logic failures.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Hides issues that attackers can exploit.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;3880&quot; data-start=&quot;3839&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3880&quot; data-start=&quot;3839&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;12. Type Confusion / Casting Errors&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;3897&quot; data-start=&quot;3882&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3999&quot; data-start=&quot;3899&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Using incorrect type casts, especially when using void pointers or complex class hierarchies in C++.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;4010&quot; data-start=&quot;4001&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risk:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;4109&quot; data-start=&quot;4047&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Results in undefined behavior.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Can be exploited to execute arbitrary code in complex systems.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;5797&quot; data-start=&quot;5775&quot;&gt;&lt;/p&gt;&lt;p data-end=&quot;4649&quot; data-start=&quot;4356&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In addition to secure coding,&amp;nbsp;&lt;strong data-end=&quot;4402&quot; data-start=&quot;4386&quot;&gt;code reviews&lt;/strong&gt;,&amp;nbsp;&lt;strong data-end=&quot;4429&quot; data-start=&quot;4404&quot;&gt;static analysis tools&lt;/strong&gt;&amp;nbsp;(like&amp;nbsp;&lt;strong data-end=&quot;4448&quot; data-start=&quot;4436&quot;&gt;Cppcheck&lt;/strong&gt;,&amp;nbsp;&lt;strong data-end=&quot;4464&quot; data-start=&quot;4450&quot;&gt;Clang-Tidy&lt;/strong&gt;, or&amp;nbsp;&lt;strong data-end=&quot;4481&quot; data-start=&quot;4469&quot;&gt;Coverity&lt;/strong&gt;), and&amp;nbsp;&lt;strong data-end=&quot;4513&quot; data-start=&quot;4488&quot;&gt;dynamic testing tools&lt;/strong&gt;&amp;nbsp;(like&amp;nbsp;&lt;strong data-end=&quot;4532&quot; data-start=&quot;4520&quot;&gt;Valgrind&lt;/strong&gt;,&amp;nbsp;&lt;strong data-end=&quot;4542&quot; data-start=&quot;4534&quot;&gt;ASan&lt;/strong&gt;,&amp;nbsp;&lt;strong data-end=&quot;4555&quot; data-start=&quot;4544&quot;&gt;Fuzzers&lt;/strong&gt;) are critical in identifying and mitigating these issues before they make it into production.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;234&quot; data-start=&quot;207&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;234&quot; data-start=&quot;207&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;13. Dangling Pointers&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;251&quot; data-start=&quot;236&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;354&quot; data-start=&quot;253&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;A&amp;nbsp;&lt;strong data-end=&quot;275&quot; data-start=&quot;255&quot;&gt;dangling pointer&lt;/strong&gt;&amp;nbsp;is a pointer that continues to reference memory after it has been deallocated.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;449&quot; data-start=&quot;356&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;* ptr = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-built_in&quot;&gt;int&lt;/span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;delete&lt;/span&gt; ptr;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;*ptr = &lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;;  &lt;span class=&quot;hljs-comment&quot;&gt;// Dangling: accessing freed memory&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;474&quot; data-start=&quot;451&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why it’s dangerous:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;680&quot; data-start=&quot;567&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Can lead to undefined behavior, crashes, or accidental corruption of unrelated memory.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If attackers can predict or control memory reuse, they may exploit the dangling pointer to hijack execution flow.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;704&quot; data-start=&quot;682&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;How to prevent it:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;866&quot; data-start=&quot;764&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Set pointers to&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;733&quot; data-start=&quot;724&quot; style=&quot;text-align: justify;&quot;&gt;nullptr&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;immediately after deletion.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use smart pointers like&amp;nbsp;&lt;code data-end=&quot;805&quot; data-start=&quot;788&quot;&gt;std::unique_ptr&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code data-end=&quot;826&quot; data-start=&quot;809&quot;&gt;std::shared_ptr&lt;/code&gt;&amp;nbsp;in C++ for automatic memory management.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;907&quot; data-start=&quot;873&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;907&quot; data-start=&quot;873&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;14. Improper Bounds Checking&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;924&quot; data-start=&quot;909&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1037&quot; data-start=&quot;926&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Failing to ensure that indices or values fall within expected limits when accessing arrays, buffers, or memory.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;1098&quot; data-start=&quot;1039&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; arr[&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;];&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;arr[&lt;span class=&quot;hljs-number&quot;&gt;5&lt;/span&gt;] = &lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;;  &lt;span class=&quot;hljs-comment&quot;&gt;// Out-of-bounds write&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;1119&quot; data-start=&quot;1100&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why it matters:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1254&quot; data-start=&quot;1187&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Can cause buffer overflows, memory corruption, or logic bugs.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Common source of CVEs in both user-space and kernel-space programs.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;1278&quot; data-start=&quot;1256&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;How to prevent it:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Always validate indices before access.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Prefer safer containers like&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1365&quot; data-start=&quot;1352&quot; style=&quot;text-align: justify;&quot;&gt;std::vector&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;with&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1378&quot; data-start=&quot;1371&quot; style=&quot;text-align: justify;&quot;&gt;.at()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;method in C++.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Enable compiler flags like&amp;nbsp;&lt;code data-end=&quot;1443&quot; data-start=&quot;1423&quot;&gt;-fsanitize=address&lt;/code&gt;&amp;nbsp;or use static analysis tools.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;1473&quot; data-start=&quot;1396&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;h2 data-end=&quot;1520&quot; data-start=&quot;1480&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;1520&quot; data-start=&quot;1480&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;15. Insecure Deserialization (C++)&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;1537&quot; data-start=&quot;1522&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1689&quot; data-start=&quot;1539&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In&amp;nbsp;&lt;strong data-end=&quot;1570&quot; data-start=&quot;1542&quot;&gt;insecure deserialization&lt;/strong&gt;, untrusted data is used to rebuild objects, potentially allowing attackers to manipulate object state or execute code.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;1810&quot; data-start=&quot;1691&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// Example pseudocode&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;MyClass obj;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;ifstream &lt;span class=&quot;hljs-title&quot;&gt;file&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;data.ser&quot;&lt;/span&gt;&lt;/span&gt;);&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;file &amp;gt;&amp;gt; obj;  &lt;span class=&quot;hljs-comment&quot;&gt;// Deserializing untrusted input&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;1821&quot; data-start=&quot;1812&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risk:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;p data-end=&quot;1877&quot; data-start=&quot;1825&quot; style=&quot;display: inline; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Attackers can craft malicious serialized objects to:&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Modify program logic&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Trigger unexpected behavior&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Possibly execute arbitrary code depending on how deserialization is implemented&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p data-end=&quot;2018&quot; data-start=&quot;1939&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;h3 data-end=&quot;2035&quot; data-start=&quot;2020&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Prevention:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Avoid deserializing data from untrusted sources.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Use safe and verified serialization libraries with schema validation.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Implement input validation and integrity checks (e.g., signatures, checksums).&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;2240&quot; data-start=&quot;2162&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;h2 data-end=&quot;2279&quot; data-start=&quot;2247&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2279&quot; data-start=&quot;2247&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;16. Volatile Keyword Misuse&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;2296&quot; data-start=&quot;2281&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2377&quot; data-start=&quot;2298&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Using the&amp;nbsp;&lt;code data-end=&quot;2318&quot; data-start=&quot;2308&quot;&gt;volatile&lt;/code&gt;&amp;nbsp;keyword incorrectly or assuming it provides thread safety.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;2486&quot; data-start=&quot;2379&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;volatile&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;bool&lt;/span&gt; done = &lt;span class=&quot;hljs-literal&quot;&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;worker&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt; {&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;while&lt;/span&gt; (!done) {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-comment&quot;&gt;// do something&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;2513&quot; data-start=&quot;2488&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why it&#39;s problematic:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2675&quot; data-start=&quot;2628&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;code data-end=&quot;2527&quot; data-start=&quot;2517&quot; style=&quot;text-align: justify;&quot;&gt;volatile&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;only prevents compiler optimizations; it&amp;nbsp;&lt;/span&gt;&lt;strong data-end=&quot;2581&quot; data-start=&quot;2569&quot; style=&quot;text-align: justify;&quot;&gt;does not&lt;/strong&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;guarantee memory visibility across threads.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Misuse can lead to subtle multi-threading bugs.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;2700&quot; data-start=&quot;2677&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Proper alternative:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2869&quot; data-start=&quot;2815&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use proper synchronization primitives like&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2760&quot; data-start=&quot;2747&quot; style=&quot;text-align: justify;&quot;&gt;std::atomic&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2774&quot; data-start=&quot;2762&quot; style=&quot;text-align: justify;&quot;&gt;std::mutex&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, or&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2804&quot; data-start=&quot;2779&quot; style=&quot;text-align: justify;&quot;&gt;std::condition_variable&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;in C++.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Understand memory models and concurrency implications.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;2916&quot; data-start=&quot;2876&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2916&quot; data-start=&quot;2876&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;17. Signal Handler Vulnerabilities&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;2933&quot; data-start=&quot;2918&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3049&quot; data-start=&quot;2935&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Improper use of&amp;nbsp;&lt;strong data-end=&quot;2970&quot; data-start=&quot;2951&quot;&gt;signal handlers&lt;/strong&gt;&amp;nbsp;can introduce race conditions, inconsistent program state, or unsafe behavior.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;3176&quot; data-start=&quot;3051&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;handler&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;&lt;/span&gt; sig) {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;printf&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Signal received\n&quot;&lt;/span&gt;);  &lt;span class=&quot;hljs-comment&quot;&gt;// Not safe in signal context&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;signal&lt;/span&gt;(SIGINT, handler);&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;3201&quot; data-start=&quot;3178&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Why it’s dangerous:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3382&quot; data-start=&quot;3295&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Only&amp;nbsp;&lt;/span&gt;&lt;strong data-end=&quot;3231&quot; data-start=&quot;3210&quot; style=&quot;text-align: justify;&quot;&gt;async-signal-safe&lt;/strong&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;functions (like&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;3255&quot; data-start=&quot;3248&quot; style=&quot;text-align: justify;&quot;&gt;write&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;) can be used inside signal handlers.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Unsafe function calls (like&amp;nbsp;&lt;code data-end=&quot;3331&quot; data-start=&quot;3323&quot;&gt;malloc&lt;/code&gt;,&amp;nbsp;&lt;code data-end=&quot;3341&quot; data-start=&quot;3333&quot;&gt;printf&lt;/code&gt;, etc.) may lead to deadlocks or crashes.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;3409&quot; data-start=&quot;3384&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Safe signal handling:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;4649&quot; data-start=&quot;4356&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Minimize logic inside the handler.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Set a flag or use&amp;nbsp;&lt;code data-end=&quot;3482&quot; data-start=&quot;3468&quot;&gt;sig_atomic_t&lt;/code&gt;&amp;nbsp;to signal the main thread to take action later.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;3530&quot; data-start=&quot;3450&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h2 data-end=&quot;543&quot; data-start=&quot;484&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;18. Type Conversion Issues (Signed/Unsigned Mismatch)&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;560&quot; data-start=&quot;545&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;658&quot; data-start=&quot;562&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Mixing signed and unsigned types in expressions can lead to logic errors or unexpected behavior.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;763&quot; data-start=&quot;660&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; a = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; b = &lt;span class=&quot;hljs-number&quot;&gt;-2&lt;/span&gt;;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (a &amp;gt; b) {&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;// True? Yes, due to implicit conversion!&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;774&quot; data-start=&quot;765&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risk:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;898&quot; data-start=&quot;827&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Leads to incorrect comparisons and logic bugs.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Can be used by attackers to bypass input validation or overflow checks.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;915&quot; data-start=&quot;900&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Prevention:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1017&quot; data-start=&quot;961&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Avoid mixing signed and unsigned types.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use explicit casts with care and always validate ranges.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;1071&quot; data-start=&quot;1024&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;1071&quot; data-start=&quot;1024&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;19. Time-of-Check to Time-of-Use (TOCTOU)&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;1088&quot; data-start=&quot;1073&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1210&quot; data-start=&quot;1090&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;When a resource (file, permission, etc.) is checked and then used later, a window opens where an attacker can change it.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;1347&quot; data-start=&quot;1212&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;hljs-built_in&quot;&gt;access&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;file.txt&quot;&lt;/span&gt;, R_OK) == &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;) {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;// Attacker swaps file before we open it&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; fd = &lt;span class=&quot;hljs-built_in&quot;&gt;open&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;file.txt&quot;&lt;/span&gt;, O_RDONLY);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;1364&quot; data-start=&quot;1349&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Prevention:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Avoid using&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1390&quot; data-start=&quot;1380&quot; style=&quot;text-align: justify;&quot;&gt;access()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1403&quot; data-start=&quot;1395&quot; style=&quot;text-align: justify;&quot;&gt;open()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;separately.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1440&quot; data-start=&quot;1422&quot; style=&quot;text-align: justify;&quot;&gt;O_CREAT | O_EXCL&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;or secure file APIs that combine check and use.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use file descriptors directly when possible.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;1535&quot; data-start=&quot;1491&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;h2 data-end=&quot;1574&quot; data-start=&quot;1542&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;1574&quot; data-start=&quot;1542&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;20. Improper Use of Macros&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;1591&quot; data-start=&quot;1576&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1680&quot; data-start=&quot;1593&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Macros may expand in unexpected ways, leading to side effects or incorrect evaluations.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;1773&quot; data-start=&quot;1682&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;#&lt;span class=&quot;hljs-keyword&quot;&gt;define&lt;/span&gt;&lt;/span&gt; SQUARE(x) x * x&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; result = &lt;span class=&quot;hljs-built_in&quot;&gt;SQUARE&lt;/span&gt;(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt; + &lt;span class=&quot;hljs-number&quot;&gt;2&lt;/span&gt;);  &lt;span class=&quot;hljs-comment&quot;&gt;// Expands to 1 + 2 * 1 + 2&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;1783&quot; data-start=&quot;1775&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use inline functions or&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;1822&quot; data-start=&quot;1811&quot; style=&quot;text-align: justify;&quot;&gt;constexpr&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&amp;nbsp;in C++ for safe behavior.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-end=&quot;1888&quot; data-start=&quot;1855&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;1888&quot; data-start=&quot;1855&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;21. Unchecked Return Values&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;1905&quot; data-start=&quot;1890&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1997&quot; data-start=&quot;1907&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Ignoring return values from standard library or system calls can lead to missing failures.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;2070&quot; data-start=&quot;1999&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot; style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;fwrite&lt;/span&gt;(data, &lt;span class=&quot;hljs-built_in&quot;&gt;sizeof&lt;/span&gt;(data), &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;, file);  &lt;span class=&quot;hljs-comment&quot;&gt;// But did it succeed?&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;2087&quot; data-start=&quot;2072&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Prevention:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Always check the return values of functions that can fail, especially I/O, memory allocation, and system calls.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-end=&quot;2239&quot; data-start=&quot;2209&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2239&quot; data-start=&quot;2209&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;22. Thread Safety Issues&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;2256&quot; data-start=&quot;2241&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2322&quot; data-start=&quot;2258&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Using shared data across threads without proper synchronization.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;2407&quot; data-start=&quot;2324&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; shared = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;thread_func&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt; {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    shared++;  &lt;span class=&quot;hljs-comment&quot;&gt;// Race condition!&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;2417&quot; data-start=&quot;2409&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2559&quot; data-start=&quot;2496&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2437&quot; data-start=&quot;2425&quot; style=&quot;text-align: justify;&quot;&gt;std::mutex&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2452&quot; data-start=&quot;2439&quot; style=&quot;text-align: justify;&quot;&gt;std::atomic&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, or higher-level thread-safe structures.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Always protect shared resources in multi-threaded environments.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;2602&quot; data-start=&quot;2566&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2602&quot; data-start=&quot;2566&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;23. Use of Dangerous Functions&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;2619&quot; data-start=&quot;2604&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2722&quot; data-start=&quot;2621&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Functions like&amp;nbsp;&lt;code data-end=&quot;2644&quot; data-start=&quot;2636&quot;&gt;gets()&lt;/code&gt;,&amp;nbsp;&lt;code data-end=&quot;2656&quot; data-start=&quot;2646&quot;&gt;strcpy()&lt;/code&gt;,&amp;nbsp;&lt;code data-end=&quot;2669&quot; data-start=&quot;2658&quot;&gt;sprintf()&lt;/code&gt;&amp;nbsp;are inherently unsafe and prone to buffer overflows.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;2733&quot; data-start=&quot;2724&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risk:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Many have been deprecated or removed f&lt;/span&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;rom modern standards, but they still exist in legacy code.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-end=&quot;2858&quot; data-start=&quot;2835&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Safer Alternatives:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2875&quot; data-start=&quot;2866&quot; style=&quot;text-align: justify;&quot;&gt;fgets()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2888&quot; data-start=&quot;2877&quot; style=&quot;text-align: justify;&quot;&gt;strncpy()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2902&quot; data-start=&quot;2890&quot; style=&quot;text-align: justify;&quot;&gt;snprintf()&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, and consider C++ abstractions (&lt;/span&gt;&lt;code data-end=&quot;2948&quot; data-start=&quot;2935&quot; style=&quot;text-align: justify;&quot;&gt;std::string&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;2969&quot; data-start=&quot;2950&quot; style=&quot;text-align: justify;&quot;&gt;std::stringstream&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-end=&quot;3016&quot; data-start=&quot;2978&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3016&quot; data-start=&quot;2978&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;24. Environment Variable Attacks&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;3033&quot; data-start=&quot;3018&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3153&quot; data-start=&quot;3035&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Programs relying on environment variables (e.g., for paths, passwords, or config) may be tricked into unsafe behavior.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;3194&quot; data-start=&quot;3155&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot; style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;char&lt;/span&gt;* path = &lt;span class=&quot;hljs-built_in&quot;&gt;getenv&lt;/span&gt;(&lt;span class=&quot;hljs-string&quot;&gt;&quot;PATH&quot;&lt;/span&gt;);
&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;3205&quot; data-start=&quot;3196&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Risk:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Attackers c&lt;/span&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;an manipulate the environment (especially in setuid programs) to control program behavior.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-end=&quot;3320&quot; data-start=&quot;3312&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3418&quot; data-start=&quot;3371&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Validate and sanitize environment variables.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Drop privileges when they are no longer needed.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 data-end=&quot;3469&quot; data-start=&quot;3425&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3469&quot; data-start=&quot;3425&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;25. Stack Exhaustion / Deep Recursion&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;3486&quot; data-start=&quot;3471&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What is it?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3567&quot; data-start=&quot;3488&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Unbounded recursion or large local variable allocations can overflow the stack.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;3639&quot; data-start=&quot;3569&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;recurse_forever&lt;/span&gt;&lt;span class=&quot;hljs-params&quot;&gt;()&lt;/span&gt; {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;recurse_forever&lt;/span&gt;();  &lt;span class=&quot;hljs-comment&quot;&gt;// Boom!&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;3649&quot; data-start=&quot;3641&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/h3&gt;&lt;ul data-end=&quot;3749&quot; data-start=&quot;3651&quot;&gt;&lt;li data-end=&quot;3693&quot; data-start=&quot;3651&quot;&gt;&lt;p data-end=&quot;3693&quot; data-start=&quot;3653&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use iteration instead of deep recursion.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li data-end=&quot;3749&quot; data-start=&quot;3694&quot;&gt;&lt;p data-end=&quot;3749&quot; data-start=&quot;3696&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Allocate large data on the heap or use&amp;nbsp;&lt;code data-end=&quot;3748&quot; data-start=&quot;3735&quot;&gt;std::vector&lt;/code&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-end=&quot;3798&quot; data-start=&quot;3756&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3798&quot; data-start=&quot;3756&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;26. Undefined Behavior in General&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;3889&quot; data-start=&quot;3800&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;C/C++ has hundreds of forms of&amp;nbsp;&lt;strong data-end=&quot;3857&quot; data-start=&quot;3835&quot;&gt;undefined behavior&lt;/strong&gt;&amp;nbsp;(UB), and many bugs arise from:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Dereferencing null/invalid pointers&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Modifying const objects&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large; text-align: justify;&quot;&gt;Violating object lifetimes&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Using shifted values out of range (&lt;/span&gt;&lt;code data-end=&quot;4030&quot; data-start=&quot;4021&quot; style=&quot;text-align: justify;&quot;&gt;x &amp;lt;&amp;lt; 32&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Modifying and reading the same variable without a sequence point&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-end=&quot;4098&quot; data-start=&quot;4034&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;h3 data-end=&quot;4108&quot; data-start=&quot;4100&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;4312&quot; data-start=&quot;4223&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Use modern compilers with flags like&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;4156&quot; data-start=&quot;4149&quot; style=&quot;text-align: justify;&quot;&gt;-Wall&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;4167&quot; data-start=&quot;4158&quot; style=&quot;text-align: justify;&quot;&gt;-Wextra&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;4178&quot; data-start=&quot;4169&quot; style=&quot;text-align: justify;&quot;&gt;-Werror&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;4202&quot; data-start=&quot;4180&quot; style=&quot;text-align: justify;&quot;&gt;-fsanitize=undefined&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;, and&amp;nbsp;&lt;/span&gt;&lt;code data-end=&quot;4219&quot; data-start=&quot;4208&quot; style=&quot;text-align: justify;&quot;&gt;-pedantic&lt;/code&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use static analysis tools like&amp;nbsp;&lt;strong data-end=&quot;4279&quot; data-start=&quot;4254&quot;&gt;Clang Static Analyzer&lt;/strong&gt;,&amp;nbsp;&lt;strong data-end=&quot;4293&quot; data-start=&quot;4281&quot;&gt;Coverity&lt;/strong&gt;, or&amp;nbsp;&lt;strong data-end=&quot;4311&quot; data-start=&quot;4298&quot;&gt;SonarQube&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;4350&quot; data-start=&quot;4319&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2476739180652586655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2476739180652586655'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2025/05/Common Security-Flaws-in-C.html' title='Common Security Flaws in C and C++'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiCIv2NfLU2dZV6BlagOt107yhNbbJvAjp0Z4Yi_7qUCR5M3OefCnVVhOWXR6pYdjF9Q-7rbNCvZIAa_L5vaBHuKovHJia-0UEJ-jXH6wDKT8k3ytXu0aLgxIbODKm--wzB4LlYKyzJsnleFvFtPl2uf1bQSmEc8d-S-ZRzH8ymYfbUNp2M8eXNZAoBrBw=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-1393592967276227283</id><published>2025-05-07T23:20:00.000-07:00</published><updated>2025-06-04T10:10:01.011-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Languages"/><title type='text'>Essential C++ Coding Practices for Readability and Maintainability</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;There are certain rules and best practices that can significantly improve the readability, maintainability, and overall quality of your code, when coding in C++. By committing to these guidelines, you can create cleaner, more efficient code that is easier to debug, maintain, and scale. Whether you’re a beginner or an experienced developer, following these coding standards can improve your programming workflow and help you avoid common mistakes.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;518&quot; data-start=&quot;72&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEipONzV6dq-CKE93I-AJvtH_Llp_8-wMifSyAnZaCvcHWJ21ZCN11sCK9Qc6LGC4Rtsu536naEE4QiApXOQtQwpi-qGUrG96P2zf6FNt8Jae_gKcyJ3PILO9eAljhoVoMoG08RWsnz9h7x55ekVQOLJU4de1DyeXX7g2c2iOH_Jn4CUPrY2rPxuda4fIEc=s1600&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;Essential C++ Coding Practices for Readability and Maintainability&quot; border=&quot;0&quot; data-original-height=&quot;1095&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEipONzV6dq-CKE93I-AJvtH_Llp_8-wMifSyAnZaCvcHWJ21ZCN11sCK9Qc6LGC4Rtsu536naEE4QiApXOQtQwpi-qGUrG96P2zf6FNt8Jae_gKcyJ3PILO9eAljhoVoMoG08RWsnz9h7x55ekVQOLJU4de1DyeXX7g2c2iOH_Jn4CUPrY2rPxuda4fIEc=s16000&quot; title=&quot;Essential C++ Coding Practices for Readability and Maintainability&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p data-end=&quot;518&quot; data-start=&quot;72&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;567&quot; data-start=&quot;520&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;1. &lt;strong data-end=&quot;567&quot; data-start=&quot;527&quot;&gt;Use Meaningful and Descriptive Names&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;986&quot; data-start=&quot;569&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;One of the most important practices in C++ programming is choosing clear, descriptive names for variables, functions, and classes. Names should accurately represent the purpose and functionality of your code elements, making it easier for others (and your future self) to understand the code. Avoid cryptic abbreviations or single-letter names, unless they are well-accepted conventions (e.g., &lt;code data-end=&quot;966&quot; data-start=&quot;963&quot;&gt;i&lt;/code&gt; for loop counters).&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1000&quot; data-start=&quot;988&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;For example:&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1179&quot; data-start=&quot;1082&quot; style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large; text-align: justify;&quot;&gt;Instead of &lt;/span&gt;&lt;code data-end=&quot;1021&quot; data-start=&quot;1014&quot; style=&quot;text-align: justify;&quot;&gt;int x&lt;/code&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large; text-align: justify;&quot;&gt;, use &lt;/span&gt;&lt;code data-end=&quot;1036&quot; data-start=&quot;1027&quot; style=&quot;text-align: justify;&quot;&gt;int age&lt;/code&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large; text-align: justify;&quot;&gt; if the variable represents a person’s age.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Instead of &lt;code data-end=&quot;1106&quot; data-start=&quot;1093&quot;&gt;calculate()&lt;/code&gt;, use &lt;code data-end=&quot;1136&quot; data-start=&quot;1112&quot;&gt;calculateTotalAmount()&lt;/code&gt; if the function calculates a total amount.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 data-end=&quot;1229&quot; data-start=&quot;1181&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;2. &lt;strong data-end=&quot;1229&quot; data-start=&quot;1188&quot;&gt;Consistent Indentation and Formatting&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;1599&quot; data-start=&quot;1231&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Proper indentation and consistent formatting are crucial for making your code readable. Consistently indented code is much easier to follow, especially in larger projects. Use braces &lt;code data-end=&quot;1418&quot; data-start=&quot;1414&quot;&gt;{}&lt;/code&gt; to define code blocks even if they are optional for single-line statement. This practice enhances code to provide clarity and reduces the chances of errors when modifying or adding new code.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1618&quot; data-start=&quot;1601&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;A simple example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;1702&quot; data-start=&quot;1619&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; (condition) {&lt;/span&gt;&lt;/div&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;// Do something&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;} &lt;span class=&quot;hljs-keyword&quot;&gt;else&lt;/span&gt; {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;// Do something else&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;1732&quot; data-start=&quot;1704&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;3. &lt;strong data-end=&quot;1732&quot; data-start=&quot;1711&quot;&gt;Comment Your Code&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2095&quot; data-start=&quot;1734&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Specially for complex logic or algorithms, comments are your opportunity to explain why certain decisions were made in your code. A good comment should describe the purpose of the code, its inputs, outputs, and any assumptions or limitations. However, avoid over-commenting or explaining obvious code. Comments should be clear, concise, and easy to understand.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;2109&quot; data-start=&quot;2097&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;For example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;2205&quot; data-start=&quot;2110&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;// Calculate the total amount after tax&lt;/span&gt;&lt;/div&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; totalAmount = amount * (&lt;/span&gt;&lt;span class=&quot;hljs-number&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; + taxRate);&lt;/span&gt;&lt;/div&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;2255&quot; data-start=&quot;2207&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;4. &lt;strong data-end=&quot;2255&quot; data-start=&quot;2214&quot;&gt;Follow a Consistent Naming Convention&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;2413&quot; data-start=&quot;2257&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Choosing a consistent naming convention is key to ensuring that your code remains organized and easy to navigate. Popular naming conventions in C++ include:&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2429&quot; data-start=&quot;2416&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;2429&quot; data-start=&quot;2416&quot;&gt;CamelCase&lt;/strong&gt; (e.g., &lt;code data-end=&quot;2453&quot; data-start=&quot;2437&quot;&gt;myVariableName&lt;/code&gt;)&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;2471&quot; data-start=&quot;2457&quot;&gt;snake_case&lt;/strong&gt; (e.g., &lt;code data-end=&quot;2497&quot; data-start=&quot;2479&quot;&gt;my_variable_name&lt;/code&gt;)&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;2515&quot; data-start=&quot;2501&quot;&gt;PascalCase&lt;/strong&gt; (e.g., &lt;code data-end=&quot;2536&quot; data-start=&quot;2523&quot;&gt;MyClassName&lt;/code&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;/strong&gt;
&lt;/span&gt;&lt;p data-end=&quot;2537&quot; data-start=&quot;2501&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;p data-end=&quot;2671&quot; data-start=&quot;2539&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Whatever naming convention you choose, ensure that it remains consistent throughout your project to maintain a uniform coding style.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;2729&quot; data-start=&quot;2673&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;5. &lt;strong data-end=&quot;2729&quot; data-start=&quot;2680&quot;&gt;Organize Your Code into Functions and Classes&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3043&quot; data-start=&quot;2731&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;A well-organized program is easier to debug, maintain, and extend. Break your code into small, reusable functions and classes. This promotes modularity, helps with code reuse, and makes it simpler to test and debug individual pieces of functionality. A small function or class should do one thing and do it well.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;3057&quot; data-start=&quot;3045&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;For example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;3199&quot; data-start=&quot;3058&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;void&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-title&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;calculateTax&lt;/span&gt;&lt;span class=&quot;hljs-params&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;(&lt;span class=&quot;hljs-type&quot;&gt;double&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; amount, &lt;/span&gt;&lt;span class=&quot;hljs-type&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; taxRate) {&lt;/span&gt;&lt;/div&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;hljs-type&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; totalAmount = amount * (&lt;/span&gt;&lt;span class=&quot;hljs-number&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; + taxRate);&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-comment&quot;&gt;// Additional logic here&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;3240&quot; data-start=&quot;3201&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;6. &lt;strong data-end=&quot;3240&quot; data-start=&quot;3208&quot;&gt;Avoid Using Global Variables&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3585&quot; data-start=&quot;3242&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Global variables can make code harder to understand and maintain, especially in large projects. They can create hidden dependencies, making it challenging to track how changes in one part of the program affect other parts. Whenever possible, avoid global variables and instead pass data as function parameters or encapsulate it within classes.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;3629&quot; data-start=&quot;3587&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;7. &lt;strong data-end=&quot;3629&quot; data-start=&quot;3594&quot;&gt;Initialise Variables Before Use&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;3892&quot; data-start=&quot;3631&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Uninitialised variables can lead to undefined behavior, making your program unreliable. Always initialise variables before you use them to ensure predictable and correct behavior. This is especially important when dealing with variables that hold critical data.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;3906&quot; data-start=&quot;3894&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;For example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;3966&quot; data-start=&quot;3907&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot; style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt; count = &lt;span class=&quot;hljs-number&quot;&gt;0&lt;/span&gt;; &lt;span class=&quot;hljs-comment&quot;&gt;// Initialise variable before use&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;4016&quot; data-start=&quot;3968&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;8. &lt;strong data-end=&quot;4016&quot; data-start=&quot;3975&quot;&gt;Handle Errors and Exceptions Properly&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;4304&quot; data-start=&quot;4018&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Good error handling is essential to prevent your program from crashing unexpectedly. In C++, you can use &lt;code data-end=&quot;4134&quot; data-start=&quot;4123&quot;&gt;try-catch&lt;/code&gt; blocks to catch exceptions and handle errors gracefully. Always ensure that your &lt;code data-end=&quot;4223&quot; data-start=&quot;4216&quot;&gt;catch&lt;/code&gt; blocks log or deal with exceptions appropriately rather than leaving them empty.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;4318&quot; data-start=&quot;4306&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;For example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;4466&quot; data-start=&quot;4319&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;try&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;// Code that may throw an exception&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;} &lt;span class=&quot;hljs-built_in&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;hljs-type&quot;&gt;const&lt;/span&gt; std::exception&amp;amp; e) {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    std::cerr &amp;lt;&amp;lt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;Error: &quot;&lt;/span&gt; &amp;lt;&amp;lt; e.&lt;span class=&quot;hljs-built_in&quot;&gt;what&lt;/span&gt;() &amp;lt;&amp;lt; std::endl;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;4523&quot; data-start=&quot;4468&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;9. &lt;strong data-end=&quot;4523&quot; data-start=&quot;4475&quot;&gt;Use &lt;code data-end=&quot;4488&quot; data-start=&quot;4481&quot;&gt;const&lt;/code&gt; and &lt;code data-end=&quot;4504&quot; data-start=&quot;4493&quot;&gt;constexpr&lt;/code&gt; Where Applicable&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;4840&quot; data-start=&quot;4525&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Using &lt;code data-end=&quot;4538&quot; data-start=&quot;4531&quot;&gt;const&lt;/code&gt; and &lt;code data-end=&quot;4554&quot; data-start=&quot;4543&quot;&gt;constexpr&lt;/code&gt; helps enforce immutability and can make your code more robust. Declaring variables as &lt;code data-end=&quot;4648&quot; data-start=&quot;4641&quot;&gt;const&lt;/code&gt; indicates that their values should not be modified, while &lt;code data-end=&quot;4718&quot; data-start=&quot;4707&quot;&gt;constexpr&lt;/code&gt; can be used for compile-time constants. This helps the compiler with optimizations and prevents accidental modifications.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;4854&quot; data-start=&quot;4842&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;For example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;4922&quot; data-start=&quot;4855&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-type&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-type&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; pi = &lt;/span&gt;&lt;span class=&quot;hljs-number&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;3.14159&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;constexpr&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hljs-type&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt; MAX_SIZE = &lt;/span&gt;&lt;span class=&quot;hljs-number&quot; style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;100&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;4967&quot; data-start=&quot;4924&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;10. &lt;strong data-end=&quot;4967&quot; data-start=&quot;4932&quot;&gt;Be Mindful of Memory Management&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;5271&quot; data-start=&quot;4969&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;When dealing with dynamic memory allocation, it&#39;s important to properly manage memory to avoid memory leaks. Using smart pointers (&lt;code data-end=&quot;5117&quot; data-start=&quot;5100&quot;&gt;std::unique_ptr&lt;/code&gt;, &lt;code data-end=&quot;5136&quot; data-start=&quot;5119&quot;&gt;std::shared_ptr&lt;/code&gt;) or RAII (Resource Acquisition Is Initialization) principles ensures that memory is automatically released when it’s no longer needed.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;5285&quot; data-start=&quot;5273&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;For example:&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible!&quot; data-end=&quot;5350&quot; data-start=&quot;5286&quot;&gt;&lt;div class=&quot;contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary&quot;&gt;&lt;div class=&quot;overflow-y-auto p-4&quot; dir=&quot;ltr&quot; style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;whitespace-pre! language-cpp&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;std::unique_ptr&amp;lt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;&amp;gt; ptr = std::&lt;span class=&quot;hljs-built_in&quot;&gt;make_unique&lt;/span&gt;&amp;lt;&lt;span class=&quot;hljs-type&quot;&gt;int&lt;/span&gt;&amp;gt;(&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h3 data-end=&quot;5383&quot; data-start=&quot;5352&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;11. &lt;strong data-end=&quot;5383&quot; data-start=&quot;5360&quot;&gt;Write Readable Code&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;5662&quot; data-start=&quot;5385&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Readable code is easier to maintain and debug. Use whitespace effectively, break long lines into multiple lines, and avoid overly complex or deeply nested logic. Writing clean and readable code helps future developers (including yourself) understand the program&#39;s flow quickly.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;5700&quot; data-start=&quot;5664&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;12. &lt;strong data-end=&quot;5700&quot; data-start=&quot;5672&quot;&gt;Regularly Test Your Code&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;6006&quot; data-start=&quot;5702&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Testing is a fundamental part of writing reliable software. Regularly test your code to ensure it works as expected. Implement unit tests, integration tests, and perform manual testing to catch potential issues early in the development process. Automated tests can save you a lot of time in the long run.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;6062&quot; data-start=&quot;6008&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;13. &lt;strong data-end=&quot;6062&quot; data-start=&quot;6016&quot;&gt;Follow Best Practices and Coding Standards&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;6419&quot; data-start=&quot;6064&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Familiarise yourself with widely accepted C++ coding standards, such as the &lt;a href=&quot;https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&quot; target=&quot;_blank&quot;&gt;&lt;strong data-end=&quot;6163&quot; data-start=&quot;6140&quot;&gt;C++ Core Guidelines&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;or the &lt;strong data-end=&quot;6197&quot; data-start=&quot;6171&quot;&gt;&lt;a href=&quot;https://google.github.io/styleguide/cppguide.html&quot; target=&quot;_blank&quot;&gt;Google C++ Style Guide&lt;/a&gt;&lt;/strong&gt;. Following these standards not only improves code quality but also ensures consistancy across projects and teams. It’s important to communicate and align with the coding standards of your specific project or organisation.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;6419&quot; data-start=&quot;6064&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;6419&quot; data-start=&quot;6064&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;By follow these C++ coding practices, you can ensure that your code is both readable and maintainable, ultimately leading to high quality software and a smoother development process. While these rules serve as a strong foundation, remember that every project may have its own unique conventions. Always communicate and align with your team to ensure a consistent and efficient coding environment.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;6419&quot; data-start=&quot;6064&quot; style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &amp;quot;Segoe UI&amp;quot;, Roboto, Ubuntu, Cantarell, &amp;quot;Noto Sans&amp;quot;, sans-serif, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 16px; margin: 1.25em 0px 0px; white-space-collapse: preserve;&quot;&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/1393592967276227283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/1393592967276227283'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2025/05/Essential-C-Coding-Practices .html' title='Essential C++ Coding Practices for Readability and Maintainability'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEipONzV6dq-CKE93I-AJvtH_Llp_8-wMifSyAnZaCvcHWJ21ZCN11sCK9Qc6LGC4Rtsu536naEE4QiApXOQtQwpi-qGUrG96P2zf6FNt8Jae_gKcyJ3PILO9eAljhoVoMoG08RWsnz9h7x55ekVQOLJU4de1DyeXX7g2c2iOH_Jn4CUPrY2rPxuda4fIEc=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-7407989667631949466</id><published>2025-05-07T22:24:00.000-07:00</published><updated>2025-06-04T10:09:17.451-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Languages"/><title type='text'>Writing Secure Code in C and C++: A Practical Guide for Developers</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;C and C++ are very powerful programming languages, known for their speed, low-level access to memory, and flexibility. But with great power comes great responsibility, especially when it comes to &lt;strong data-end=&quot;488&quot; data-start=&quot;476&quot;&gt;security&lt;/strong&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi-AeuDvQGi7jm8Fjm420JEh-0tWCt6l1bzu7YVSBbBth3AZ9CoiMXwEBtyobGBr3SmW3HdaptMLWQ5KCe_lmfyhxyNuvntz49hV20gHmmCRUdpydeFSwWKMxsacbcq43i6xZvwguBEwDR896cTrY4IVz1YqX1VRLVmVXSXvA7QfvbwiZgBmk1kwVSNZ4A=s1600&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;writing-secure-coding-in-c-c++&quot; border=&quot;0&quot; data-original-height=&quot;1095&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi-AeuDvQGi7jm8Fjm420JEh-0tWCt6l1bzu7YVSBbBth3AZ9CoiMXwEBtyobGBr3SmW3HdaptMLWQ5KCe_lmfyhxyNuvntz49hV20gHmmCRUdpydeFSwWKMxsacbcq43i6xZvwguBEwDR896cTrY4IVz1YqX1VRLVmVXSXvA7QfvbwiZgBmk1kwVSNZ4A=s16000&quot; title=&quot;writing-secure-coding-in-c-c++&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Unlike many high-level languages, C and C++ provide direct control over memory and system resources exposes developers&amp;nbsp;to numerous security pitfalls if not handled with care. Here, we’ll break down some of the key areas where C and C++ developers must pay close attention to write &lt;strong data-end=&quot;865&quot; data-start=&quot;828&quot;&gt;secure, stable, and reliable code&lt;/strong&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;h2 data-end=&quot;905&quot; data-start=&quot;873&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;1. Memory Management Pitfalls&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1117&quot; data-start=&quot;907&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;One of the defining features of C and C++ is manual memory management. You get control, but that also means &lt;strong data-end=&quot;1076&quot; data-start=&quot;1015&quot;&gt;you’re responsible for allocating and deallocating memory&lt;/strong&gt; correctly. Failing to do so can lead to:&lt;/span&gt;&lt;/p&gt;&lt;span data-end=&quot;1137&quot; data-start=&quot;1121&quot; style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;1137&quot; data-start=&quot;1121&quot; style=&quot;font-weight: bold;&quot;&gt;Memory leaks&lt;/strong&gt;&lt;b&gt;: &lt;/b&gt;When dynamically allocated memory isn&#39;t released, leading to wasted resources and potential denial-of-service vulnerabilities.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;strong data-end=&quot;1288&quot; data-start=&quot;1268&quot;&gt;Buffer overflows&lt;/strong&gt;: &lt;/span&gt;Writing beyond the allocated memory space, allowing attackers to corrupt memory or inject malicious code.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;strong data-end=&quot;1419&quot; data-start=&quot;1398&quot;&gt;Dangling pointers&lt;/strong&gt;: &lt;/span&gt;When a pointer references memory that has already been freed, which can cause crashes or unpredictable behavior.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;p data-end=&quot;1533&quot; data-start=&quot;1398&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul data-end=&quot;1533&quot; data-start=&quot;1119&quot;&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1554&quot; data-start=&quot;1535&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Best Practices:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;
Always &lt;strong data-end=&quot;1579&quot; data-start=&quot;1564&quot;&gt;free memory&lt;/strong&gt; once it’s no longer needed.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use &lt;strong data-end=&quot;1652&quot; data-start=&quot;1614&quot;&gt;safe string manipulation functions&lt;/strong&gt; and perform &lt;strong data-end=&quot;1682&quot; data-start=&quot;1665&quot;&gt;bounds checks&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Prefer &lt;strong data-end=&quot;1711&quot; data-start=&quot;1693&quot;&gt;smart pointers&lt;/strong&gt; in C++ (like &lt;code data-end=&quot;1742&quot; data-start=&quot;1725&quot;&gt;std::unique_ptr&lt;/code&gt; and &lt;code data-end=&quot;1764&quot; data-start=&quot;1747&quot;&gt;std::shared_ptr&lt;/code&gt;) to automate memory management and prevent leaks.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Remember: C doesn&#39;t have smart pointers, so extra care is needed.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p data-end=&quot;1882&quot; data-start=&quot;1817&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul data-end=&quot;1882&quot; data-start=&quot;1555&quot;&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;1917&quot; data-start=&quot;1889&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;1917&quot; data-start=&quot;1889&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;2. The Danger of Pointers&lt;/span&gt;&lt;/h2&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Pointers give you powerful capabilities in C and C++, but misuse can lead to some of the most severe vulnerabilities:&lt;/div&gt;&lt;/span&gt;&lt;ul data-end=&quot;2689&quot; data-start=&quot;2423&quot; style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2070&quot; data-start=&quot;2040&quot;&gt;Null pointer dereferencing&lt;/strong&gt; can crash your program or create denial-of-service risks.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2157&quot; data-start=&quot;2131&quot;&gt;Uninitialized pointers&lt;/strong&gt; may point to arbitrary memory, leading to corruption or data exposure.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2252&quot; data-start=&quot;2231&quot;&gt;Dangling pointers&lt;/strong&gt;, again, are a common cause of undefined behavior.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2327&quot; data-start=&quot;2305&quot;&gt;Pointer arithmetic&lt;/strong&gt; can easily go wrong, especially when iterating through arrays or buffers.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Best Practices:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2448&quot; data-start=&quot;2425&quot;&gt;Initialize pointers&lt;/strong&gt; when declaring them.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Always &lt;strong data-end=&quot;2497&quot; data-start=&quot;2479&quot;&gt;check for null&lt;/strong&gt; before dereferencing.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Match every &lt;code data-end=&quot;2546&quot; data-start=&quot;2534&quot;&gt;malloc/new&lt;/code&gt; with a &lt;code data-end=&quot;2567&quot; data-start=&quot;2554&quot;&gt;free/delete&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2599&quot; data-start=&quot;2571&quot;&gt;Avoid pointer arithmetic&lt;/strong&gt; if possible—use STL containers like &lt;code data-end=&quot;2649&quot; data-start=&quot;2636&quot;&gt;std::vector&lt;/code&gt; or &lt;code data-end=&quot;2665&quot; data-start=&quot;2653&quot;&gt;std::array&lt;/code&gt; for safer alternatives.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul data-end=&quot;2689&quot; data-start=&quot;2423&quot; style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;&lt;ul data-end=&quot;2401&quot; data-start=&quot;2038&quot; style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;


&lt;h2 data-end=&quot;2743&quot; data-start=&quot;2696&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2743&quot; data-start=&quot;2696&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;3. Low-Level Access and Privilege Management&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2933&quot; data-start=&quot;2745&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;C and C++ allow access to low-level system resources, which can be both a blessing and a curse. Without careful handling, this access can open the door to &lt;strong data-end=&quot;2924&quot; data-start=&quot;2900&quot;&gt;privilege escalation&lt;/strong&gt; attacks.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;2954&quot; data-start=&quot;2935&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Key Principles:&lt;/span&gt;&lt;/h3&gt;&lt;ul data-end=&quot;3195&quot; data-start=&quot;2955&quot; style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2976&quot; data-start=&quot;2957&quot;&gt;Least Privilege&lt;/strong&gt;: Only grant the permissions necessary for the code to function. Don&#39;t give write or admin access unless required.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;strong data-end=&quot;3115&quot; data-start=&quot;3093&quot;&gt;Fail-Safe Defaults&lt;/strong&gt;: Deny access by default. Only allow access if it’s explicitly granted and safe.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3318&quot; data-start=&quot;3197&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;These principles ensure your application doesn’t expose more surface area than needed, reducing the risk of exploitation.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;3353&quot; data-start=&quot;3325&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3353&quot; data-start=&quot;3325&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;4. Risky Type Conversions&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3473&quot; data-start=&quot;3355&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Despite having a static type system, C and C++ allow implicit type conversions and dangerous casts. These can lead to:&lt;/span&gt;&lt;/p&gt;&lt;ul data-end=&quot;3544&quot; data-start=&quot;3475&quot; style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;3498&quot; data-start=&quot;3477&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Loss of precision&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;3520&quot; data-start=&quot;3501&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Data truncation&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;3544&quot; data-start=&quot;3523&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Memory corruption&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;3565&quot; data-start=&quot;3546&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Best Practices:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;
Avoid &lt;strong data-end=&quot;3598&quot; data-start=&quot;3574&quot;&gt;implicit conversions&lt;/strong&gt; whenever possible.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Use &lt;strong data-end=&quot;3654&quot; data-start=&quot;3624&quot;&gt;explicit casting operators&lt;/strong&gt; (&lt;code data-end=&quot;3669&quot; data-start=&quot;3656&quot;&gt;static_cast&lt;/code&gt;, &lt;code data-end=&quot;3689&quot; data-start=&quot;3671&quot;&gt;reinterpret_cast&lt;/code&gt;) for clarity and safety.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Be mindful of &lt;strong data-end=&quot;3745&quot; data-start=&quot;3731&quot;&gt;type sizes&lt;/strong&gt; and platform-specific differences.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Always &lt;strong data-end=&quot;3817&quot; data-start=&quot;3790&quot;&gt;validate external input&lt;/strong&gt; to prevent type-related errors.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p data-end=&quot;3849&quot; data-start=&quot;3783&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul data-end=&quot;3849&quot; data-start=&quot;3566&quot;&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;3895&quot; data-start=&quot;3856&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3895&quot; data-start=&quot;3856&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;5. Unsafe Standard Library Functions&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;4074&quot; data-start=&quot;3897&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The C standard library includes many functions (e.g., &lt;code data-end=&quot;3959&quot; data-start=&quot;3951&quot;&gt;strcpy&lt;/code&gt;, &lt;code data-end=&quot;3970&quot; data-start=&quot;3961&quot;&gt;sprintf&lt;/code&gt;, &lt;code data-end=&quot;3978&quot; data-start=&quot;3972&quot;&gt;gets&lt;/code&gt;) that don’t perform bounds checking. Using them without caution can leave your code vulnerable.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;4099&quot; data-start=&quot;4076&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;What to Do Instead:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;
Replace unsafe functions with &lt;strong data-end=&quot;4154&quot; data-start=&quot;4132&quot;&gt;safer alternatives&lt;/strong&gt;, like &lt;code data-end=&quot;4170&quot; data-start=&quot;4161&quot;&gt;strncpy&lt;/code&gt;, &lt;code data-end=&quot;4182&quot; data-start=&quot;4172&quot;&gt;snprintf&lt;/code&gt;, or &lt;code data-end=&quot;4194&quot; data-start=&quot;4187&quot;&gt;fgets&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Perform &lt;strong data-end=&quot;4233&quot; data-start=&quot;4206&quot;&gt;manual input validation&lt;/strong&gt; and length checks.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Always remember: &lt;strong data-end=&quot;4351&quot; data-start=&quot;4272&quot;&gt;just because it&#39;s in the standard library doesn’t mean it’s safe by default&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;ul data-end=&quot;4352&quot; data-start=&quot;4100&quot;&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;4397&quot; data-start=&quot;4359&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4397&quot; data-start=&quot;4359&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;6. Error Handling: Don’t Ignore It!&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;4536&quot; data-start=&quot;4399&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Many vulnerabilities stem from improper error handling. Ignoring error codes or exposing too much information through error messages can:&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;
Leave the system in an inconsistent state&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Leak sensitive internal details&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Create paths for attackers to exploit&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p data-end=&quot;4655&quot; data-start=&quot;4618&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul data-end=&quot;4655&quot; data-start=&quot;4538&quot;&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;4676&quot; data-start=&quot;4657&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Best Practices:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;
Always &lt;strong data-end=&quot;4713&quot; data-start=&quot;4686&quot;&gt;check the return values&lt;/strong&gt; of system and library calls.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Keep &lt;strong data-end=&quot;4788&quot; data-start=&quot;4750&quot;&gt;error messages vague in production&lt;/strong&gt;, but log detailed info securely.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Ensure &lt;strong data-end=&quot;4864&quot; data-start=&quot;4831&quot;&gt;all resources (files, memory)&lt;/strong&gt; are properly released to avoid leaks.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p data-end=&quot;4902&quot; data-start=&quot;4824&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul data-end=&quot;4902&quot; data-start=&quot;4677&quot;&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;4953&quot; data-start=&quot;4909&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4953&quot; data-start=&quot;4909&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;7. Race Conditions and Concurrency Issues&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;5027&quot; data-start=&quot;4955&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Concurrency is great for performance but introduces complexity and risk.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5231&quot; data-start=&quot;5144&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;
A &lt;strong data-end=&quot;5051&quot; data-start=&quot;5033&quot;&gt;race condition&lt;/strong&gt; occurs when two threads access shared data simultaneously without proper synchronization.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;This can cause &lt;strong data-end=&quot;5178&quot; data-start=&quot;5159&quot;&gt;data corruption&lt;/strong&gt;, &lt;strong data-end=&quot;5202&quot; data-start=&quot;5180&quot;&gt;undefined behavior&lt;/strong&gt;, or &lt;strong data-end=&quot;5230&quot; data-start=&quot;5207&quot;&gt;unauthorized access&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;ul data-end=&quot;5231&quot; data-start=&quot;5029&quot;&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;5252&quot; data-start=&quot;5233&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Best Practices:&lt;/span&gt;&lt;/h3&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;
Use &lt;strong data-end=&quot;5270&quot; data-start=&quot;5259&quot;&gt;mutexes&lt;/strong&gt;, &lt;code data-end=&quot;5289&quot; data-start=&quot;5272&quot;&gt;std::lock_guard&lt;/code&gt;, and other synchronization mechanisms.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Avoid shared state where possible.&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Design &lt;strong data-end=&quot;5406&quot; data-start=&quot;5375&quot;&gt;thread-safe data structures&lt;/strong&gt; or use existing ones from modern libraries.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p data-end=&quot;5450&quot; data-start=&quot;5368&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul data-end=&quot;5450&quot; data-start=&quot;5253&quot;&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;5487&quot; data-start=&quot;5457&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5487&quot; data-start=&quot;5457&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;8. Secure Coding Principles&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;5612&quot; data-start=&quot;5489&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Beyond specific vulnerabilities, a mindset of &lt;strong data-end=&quot;5560&quot; data-start=&quot;5535&quot;&gt;defensive programming&lt;/strong&gt; and following secure design principles is critical.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;5643&quot; data-start=&quot;5614&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Key Principles to Follow:&lt;/span&gt;&lt;/h3&gt;
&lt;span data-end=&quot;5674&quot; data-start=&quot;5647&quot; style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;5674&quot; data-start=&quot;5647&quot; style=&quot;font-weight: bold;&quot;&gt;Minimize Attack Surface&lt;/strong&gt;&lt;b&gt;: &lt;/b&gt;Reduce the number of entry points and limit access.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;5750&quot; data-start=&quot;5730&quot;&gt;Input Validation&lt;/strong&gt;: Sanitize and validate all input before processing.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;5832&quot; data-start=&quot;5805&quot;&gt;Secure Memory Practices&lt;/strong&gt;: Use RAII and smart pointers where possible.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;5896&quot; data-start=&quot;5880&quot;&gt;Code Reviews&lt;/strong&gt;: Get a second pair of eyes on critical code.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;5970&quot; data-start=&quot;5944&quot;&gt;Avoid Unsafe Functions&lt;/strong&gt;: Use modern, safer alternatives.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;6031&quot; data-start=&quot;6006&quot;&gt;Apply Least Privilege&lt;/strong&gt;: Whether it&#39;s file permissions or user roles, less is more.&lt;/li&gt;&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;strong data-end=&quot;6116&quot; data-start=&quot;6094&quot;&gt;Fail-Safe Defaults&lt;/strong&gt;: Restrict by default, open access only when safe.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;ul data-end=&quot;6166&quot; data-start=&quot;5645&quot;&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;6190&quot; data-start=&quot;6173&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;6550&quot; data-start=&quot;6192&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;C and C++ give developers immense control, but that power comes with the responsibility to write &lt;strong data-end=&quot;6330&quot; data-start=&quot;6289&quot;&gt;robust, secure, and maintainable code&lt;/strong&gt;. By understanding the common pitfalls—such as memory mismanagement, risky type conversions, and poor error handling—and adopting best practices, you can significantly reduce the risk of vulnerabilities in your software.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6712&quot; data-start=&quot;6552&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Whether you&#39;re building embedded systems, performance-critical applications, or systems software, secure coding in C and C++ is not optional—&lt;strong data-end=&quot;6711&quot; data-start=&quot;6693&quot;&gt;it’s essential&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6865&quot; data-start=&quot;6714&quot; style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Stay tuned for upcoming posts where we’ll dive deeper into specific vulnerabilities and explore safe alternatives and security-focused coding patterns.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/7407989667631949466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/7407989667631949466'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2025/05/writing-secure-code-in-c-and-c.html' title='Writing Secure Code in C and C++: A Practical Guide for Developers'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEi-AeuDvQGi7jm8Fjm420JEh-0tWCt6l1bzu7YVSBbBth3AZ9CoiMXwEBtyobGBr3SmW3HdaptMLWQ5KCe_lmfyhxyNuvntz49hV20gHmmCRUdpydeFSwWKMxsacbcq43i6xZvwguBEwDR896cTrY4IVz1YqX1VRLVmVXSXvA7QfvbwiZgBmk1kwVSNZ4A=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-93740025971512780</id><published>2021-08-25T08:14:00.006-07:00</published><updated>2023-05-28T23:50:37.344-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Binary Hacking"/><title type='text'>BINARY ANALYSIS(PART 4): BINARY HACKING</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;From the previous &lt;a href=&quot;https://www.linuxbaya.com/2021/05/binary-analysispart-2-inside-binary.html&quot; target=&quot;_blank&quot;&gt;two posts&lt;/a&gt;, we got some basic ideas about all 4 parts of an ELF binary i.e. executable header, program header, section, and section header. Now we will try to modify the binary as per our need. But that is not easy as it sounds, because any wrong modification in ELF can corrupt the whole binary.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;There are many ways to hack a binary, for example, modifying binary upcode with hex editor, or modifying shared library behavior using the &quot;LD_PRELOAD&quot; environment variable. But this post will be dedicated to the&amp;nbsp;&lt;/span&gt;&lt;span&gt;code section&lt;/span&gt;&lt;span&gt;&amp;nbsp;injection technique. In this technique, we will add some extra code inside the existing binary and we redirect the call to the starting&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;&amp;nbsp;of the injected code, so it can be called throughout the execution. Just adding some extra bytes at the end of the binary will not work, we also need to add a section and program header for the newly injected section to make it work. But there is a problem that the program header is located right after the executable header as we discussed in &lt;a href=&quot;https://www.linuxbaya.com/2021/05/binary-analysispart-2-inside-binary.html&quot; target=&quot;_blank&quot;&gt;part-2&lt;/a&gt;. So adding a new program header would shift all the sections and headers that come after it. To avoid such complex shifting we can simply overwrite the existing section and program headers (which are non-essential&lt;/span&gt;&lt;/span&gt;) with the new one. let’s explore how to inject a completely new code section into an ELF binary.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiglmxCW02AAgRfa9volNvbZNO8UqL2cr88WLQGHwGpJwjaPS3usB-LOHPntawryhyr-gPReiuApnl7m1uYRYoJiO6cIiiWqN0Uk6-4MLFJOJbu-sKQTPKaeZhBjLJxJy6XTpLD1T1VLhY/s2048/Binary_hack+%25286%2529.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1359&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiglmxCW02AAgRfa9volNvbZNO8UqL2cr88WLQGHwGpJwjaPS3usB-LOHPntawryhyr-gPReiuApnl7m1uYRYoJiO6cIiiWqN0Uk6-4MLFJOJbu-sKQTPKaeZhBjLJxJy6XTpLD1T1VLhY/s16000/Binary_hack+%25286%2529.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;&lt;b&gt;Making of an injectable section:-&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;Before injecting the code section, it&#39;s important to know how to make the injectable code section. Because a full-fledged ELF binary that contains headers and other overhead is not needed for the injection. we just need the .text section of an elf file as we are considering overwriting an existing program and section header. we&#39;ll write a simple&amp;nbsp;&lt;/span&gt;&lt;span&gt;assembly code that prints a hello message in Intel syntax&lt;/span&gt;,&lt;span&gt;&amp;nbsp;intended to be assembled with the nasm&amp;nbsp;&lt;/span&gt;&lt;span&gt;assembler in&amp;nbsp;&lt;/span&gt;64-bit mode.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;code&quot;&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;BITS 64&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;SECTION .text&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;global main&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;main:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; push rax&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;; save all clobbered registers&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; push rcx&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; (rcx and r11 destroyed by kernel)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; push rdx&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; push rsi&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; push rdi&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; push r11&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; mov rax,1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; sys_write&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; mov rdi,1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; stdout&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; lea rsi,[rel $+hello-$]&amp;nbsp; ; hello&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; mov rdx,[rel $+len-$]&amp;nbsp; &amp;nbsp; ; len&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; syscall&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; pop r11&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; pop rdi&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; pop rsi&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; pop rdx&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; pop rcx&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; pop rax&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; push 0x4049a0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ; jump to original entry point&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp; ret&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;hello: db &quot;Hey LinuxBaya!&quot;,33,10&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;len&amp;nbsp; : dd 15&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The first few assembly instructions save the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;rax, rcx, rdx, rsi, and rdi registers by pushing them onto the stack.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The next instructions set up the arguments for a sys_write system call,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;which will print hey linuxbaya! to the screen.&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;For sys_write, the syscall number is 1&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;(which is placed in rax)&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;, and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;there are three arguments: the file descriptor to write to (1 for stdout), a&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;pointer to the string to print, and the length of the string. Now that all the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;arguments are prepared, the syscall instruction invokes the actual system&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;call, printing the string.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;After invoking the sys_write system call, the code restores the registers&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;to their previously saved state. It then pushes the address 0x4049a0 of the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;original entry point (which can be found using readelf -h &amp;lt;binary&amp;gt;) and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;returns to that address, starting execution of the original program.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;To make the code suitable for injection, we need to assemble it into a&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;raw binary file that contains nothing more than the binary encodings of the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;assembly instructions and data. &lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;To assemble hello.s into a raw binary file, we will use the nasm&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;assembler’s -f bin option, as shown below.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;$ nasm -f bin -o hello.bin hello.s&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;This creates the file hello.bin, which contains the raw binary instructions&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;and data suitable for injection.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;&lt;b&gt;Injection of code section:-&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;There is one existing program header that we can always safely overwrite is the PT_NOTE header, which describes the PT_NOTE segment containing auxiliary information about the binary. For example, it’s a GNU/Linux binary, kernel version required for binary, and so on. The PT_NOTE segment contains this information in two sections called .note.ABI-tag and .note.gnu.build-id. If this information is missing, the loader simply assumes it’s a native binary, so it’s safe to overwrite the PT_NOTE header without fear of breaking the binary. This trick is commonly used by malicious parasites to infect binaries.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Changes required for &lt;b&gt;Section Header&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;1. The sh_name from .note.ABI-tag to .injected and sh_type from SHT_NOTE to SHT_PROGBITS to denote that the header now describes a code section.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;2. Change the sh_addr, sh_offset, and sh_size fields to describe the location and size of the new .injected section instead of the .note.ABI-tag section.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;3. Change the section alignment (sh_addralign) to 16 bytes to ensure that the code will be properly aligned when loaded into memory, and add the SHF_EXECINSTR flag to the sh_flags field to mark the section as executable.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;And for &lt;b&gt;Program Header&lt;/b&gt;:-&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;1. Change the p_type from&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;PT_NOTE&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;to PT_LOAD to indicate that the header now describes a loadable segment. So the loader will load the segment into memory when the program starts.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;2. Change the required address, offset, and size fields: p_offset, p_vaddr (and p_paddr, not shown), p_filesz, and p_memsz.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;3. Set p_flags to mark the segment as readable and executable, instead of just readable.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;4. Fix the alignment (p_align). And it’s nice to also update the string table to rename the old .note.ABI-tag section to .injected.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;To make all the above changes, I am using a tool called &lt;a href=&quot;https://drive.google.com/drive/folders/1tQP8aOo3Ebmmx1iGg1s3KUvs26JbG3q5?usp=sharing&quot; target=&quot;_blank&quot;&gt;elfenject&lt;/a&gt;, which is implemented using&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;libelf, a popular open-source&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;library for parsing ELF binaries&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Now let’s use elfinject to inject this file and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;redirect the ELF entry point using a hex editor so that the injected code&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;runs on startup of the binary.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;code&quot;&gt;./elfinject ls.entry hello.bin &quot;.injected&quot; 0x800000 -1&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhZ9KOWSiGYbDqNE49JHbnkcGyF-1TOkm1xhEyQvOqG10qzIxdOrFGI40AfcCMf9n2n6zbEs5JZcYXRBuenhCyhh0dRVe3EBFXoF5NKLF0RmuXnp_YrkW1SLyue-Lsiau9pRgL2QAl6RE/&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;List of sections in an executable ELF&quot; data-original-height=&quot;843&quot; data-original-width=&quot;1105&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhZ9KOWSiGYbDqNE49JHbnkcGyF-1TOkm1xhEyQvOqG10qzIxdOrFGI40AfcCMf9n2n6zbEs5JZcYXRBuenhCyhh0dRVe3EBFXoF5NKLF0RmuXnp_YrkW1SLyue-Lsiau9pRgL2QAl6RE/s16000/image.png&quot; title=&quot;List of sections in an executable ELF&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;background-color: white; color: #2e2e2e; outline: 0px; transition: all 0.3s ease 0s;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;List of sections in an injected executable ELF&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;We have perfectly injected a code section into an existing binary a&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;nd it is also noticeable that the section header &quot;&lt;/span&gt;&lt;span style=&quot;font-family: georgia; text-align: left;&quot;&gt;.note.ABI-tag&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&quot; is missing which is actually replaced by the &quot;.injected&quot; section header. So finally we hack one binary. B&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;ut still, the new injected code will never run unless we redirect some calls from the original .text section to injected code.&amp;nbsp; The idea is something similar to an interrupt call, first set the starting address of the injected section where we want to call the injected code, then after complete execution of injected code, we need to transfer the call to the next address of the original binary for which we need to set a return call.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;1. Entry point hacking:-&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Above picture, I changed the e_Entry field in the ELF executable header to point to an address in the new .injected section instead of the original entry point, which is usually somewhere in the .text, which we must call after returning from the injected code. For this, we will open the Assembly file and there we add a line to the end of the file before return.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;555&quot; data-original-width=&quot;1087&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg10TiZHwWf1VYK1CYUfZPQAdWLeHEWF8fc1-FyxlbiCSX7Gzg4OEw0r6qQK6-hxqNLIuXlOEIGvuKz_0SLGvYvVrDSBlQUkm2xecpZVSE2EueZCKdMrZeNHvUuuDDJDMfL5mnSu2J6vA/s16000/image.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;background-color: white; color: #2e2e2e; outline: 0px; transition: all 0.3s ease 0s;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;&amp;nbsp;The executable header of a modified ELF&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg10TiZHwWf1VYK1CYUfZPQAdWLeHEWF8fc1-FyxlbiCSX7Gzg4OEw0r6qQK6-hxqNLIuXlOEIGvuKz_0SLGvYvVrDSBlQUkm2xecpZVSE2EueZCKdMrZeNHvUuuDDJDMfL5mnSu2J6vA/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If we see the address of the injected section in the section header with readelf -h ls.entry, it is exactly the same as mentioned in the Executable header.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1QMuhsSo6ITKwJp-BVaTo2B5c-RuIrFMLTGOYNv6Nrk71AWD9GJvQ23ka8OP7JUwmSK4M1tkndjbaZQ3UMeqtO_zG2pUwWFrSfhI_9Q57xi_KD0jUJmp2vUdi4FLh5sutBBqyxl30ui0/&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;143&quot; data-original-width=&quot;543&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1QMuhsSo6ITKwJp-BVaTo2B5c-RuIrFMLTGOYNv6Nrk71AWD9GJvQ23ka8OP7JUwmSK4M1tkndjbaZQ3UMeqtO_zG2pUwWFrSfhI_9Q57xi_KD0jUJmp2vUdi4FLh5sutBBqyxl30ui0/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;background-color: white; color: #2e2e2e; outline: 0px; transition: all 0.3s ease 0s;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;The output of a modified binary&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;This creates the file hello.bin, which contains the raw binary instructions and data suitable for injection. Now let’s use elfinject to inject this file and redirect the ELF entry point using a hex editor so that the injected code runs on startup of the binary.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;There is another technique called&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;constructor/destructor hijacking that&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;allows the injected code to run only once at startup or at the termination of the binary. For this, we don&#39;t need the hardcoded original entry address (&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp; push 0x4049a0&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;) in hello.s file. And just replace the next address of &quot;.init_array&quot; or &quot;.fini_array&quot; section with injected section entry address (&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;800e78&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;) using hexedit.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;316&quot; data-original-width=&quot;960&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtn11sXx1mZHVs5NNsnvbzxSHPtGm9ec7fD9A4RTo0qqcPcU6rkO8-5Xm3Ec819J86y4RyII_3KaJZKdwjklmDR5x8dXAEZHo6Bljc7Y2gz1LwVtIwLsFDJYrZ4w1gYrkPXcbo1fjS9bY/s16000/image.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;background-color: white; color: #2e2e2e; outline: 0px; transition: all 0.3s ease 0s;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;Entry point of section .init_array and .fini_array&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtn11sXx1mZHVs5NNsnvbzxSHPtGm9ec7fD9A4RTo0qqcPcU6rkO8-5Xm3Ec819J86y4RyII_3KaJZKdwjklmDR5x8dXAEZHo6Bljc7Y2gz1LwVtIwLsFDJYrZ4w1gYrkPXcbo1fjS9bY/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If we want to invoke the injected function repeatedly, then we need to hack a GOT or PLT entry to replace a library call with an injected function.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;2. Hack .GOT section:-&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;With GOT hijacking, we&#39;ll completely replace a library function, so there’s no need to transfer control back to the original implementation when the injected code completes. Thus, the assemblly shouldn’t contain any hard-coded address to which it transfers control at the end. It simply ends with a normal return. Let’s take a look at how to implement the GOT hijacking technique in practice.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_5lHhi2Yb2JEqCHbn80PYgGzHk0QbGhN2JI4uOQ-Ce16Ic_Y9p2m0Qr24x2rGTo5t8K6FQNW0oX_ceBYvgfRQw3r3rhmFYw-18xbG36959MzucqxfKAx9dODC88KCLnZUyrqbYncGFVA/s1117/1Capture.PNG&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;100&quot; data-original-width=&quot;1117&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_5lHhi2Yb2JEqCHbn80PYgGzHk0QbGhN2JI4uOQ-Ce16Ic_Y9p2m0Qr24x2rGTo5t8K6FQNW0oX_ceBYvgfRQw3r3rhmFYw-18xbG36959MzucqxfKAx9dODC88KCLnZUyrqbYncGFVA/s16000/1Capture.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;background-color: white; color: #2e2e2e; outline: 0px; transition: all 0.3s ease 0s;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;Use of tool elfinject with option -1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Remove the instruction &quot;push 0x4049a0&quot; from the hello.s file and make a fresh hello.bin file using nasm tool as shown in the above picture and create a fresh copy of ls and inject our code into it.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi13vuAI9DIpUaMOs0d0aFVtPb4F2Lja2jr1NaxLGGFfCwjem7w0rcnilJEMN3tZcz1xlS9Io_-Ijhcs2W9g95QzkYh0Du2k0Ec2YJUhyphenhyphen6KefeeMLz2T1Qi_LDIyjWI_8W0Th0OvHbEAHA/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;171&quot; data-original-width=&quot;1342&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi13vuAI9DIpUaMOs0d0aFVtPb4F2Lja2jr1NaxLGGFfCwjem7w0rcnilJEMN3tZcz1xlS9Io_-Ijhcs2W9g95QzkYh0Du2k0Ec2YJUhyphenhyphen6KefeeMLz2T1Qi_LDIyjWI_8W0Th0OvHbEAHA/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;background-color: white; color: #2e2e2e; outline: 0px; transition: all 0.3s ease 0s;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;Part of PLT section&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Now we can use objdump to view the binary’s PLT entries (where the GOT entries are used) and find the one for fwrite_unlocked that is responsible for sys_write system call. It starts at address 0x402800, and the GOT entry it uses is located at address 0x61e2a0, which is in the .got.plt section. Using objdump to view the .got.plt section, you can see the original address stored in the GOT entry: 402806 (encoded in little-endian format).&lt;/span&gt;&lt;/p&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8DrYGLVLGvaRnR23RNBAvZyO23GFWSMuqagOQ6gZAD-xCn2HqOPdLE7_EbiXcYOJ3VAQ4Lu1iSIlYU-fO47CP3GhPitum1tnkhnsXoZyEKaej9FGPdnrXm28B5p_48z_nku0KcQ1N9ww/&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;154&quot; data-original-width=&quot;1031&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8DrYGLVLGvaRnR23RNBAvZyO23GFWSMuqagOQ6gZAD-xCn2HqOPdLE7_EbiXcYOJ3VAQ4Lu1iSIlYU-fO47CP3GhPitum1tnkhnsXoZyEKaej9FGPdnrXm28B5p_48z_nku0KcQ1N9ww/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b style=&quot;background-color: white; color: #2e2e2e; outline: 0px; transition: all 0.3s ease 0s;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;After and before modifying the .got.plt section&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;As explained in &lt;a href=&quot;https://www.linuxbaya.com/2021/05/binary-analysispart-3-inside-binary.html&quot; target=&quot;_blank&quot;&gt;part-3&lt;/a&gt;&amp;nbsp;lazy binding concept, this is the address of the next instruction in fwrite_unlocked’s PLT entry, which we want to overwrite with the address of the injected code. Open the ls.got file with hexedit and search for string 062840 and replace it with 780e80 (&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;0x800e78&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;. After changing the GOT entry to point it into our “Hey LinuxBaya!” function, the ls program now prints&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;“Hey LinuxBaya!”&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;every time it invokes fwrite_unlocked, replacing all of the usual ls output with copies of the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;“Hey LinuxBaya!”&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;string. Of course, in real life, you’d want to replace fwrite_unlocked with a more useful function.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQSPSVm0iU0YNwkiwt2tA6iHmrmVi1c0_G1WbH6DyC7IyZdYY6X34zjWlrBape8aplvUhyphenhyphenS13I4iRIUci6IJ2uhXq7OP0TeUNQa7_SXpZYgaL6E8IT7MBJVYG9JShyphenhyphen-uCTwzkPlPFql40/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;227&quot; data-original-width=&quot;583&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQSPSVm0iU0YNwkiwt2tA6iHmrmVi1c0_G1WbH6DyC7IyZdYY6X34zjWlrBape8aplvUhyphenhyphenS13I4iRIUci6IJ2uhXq7OP0TeUNQa7_SXpZYgaL6E8IT7MBJVYG9JShyphenhyphen-uCTwzkPlPFql40/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #2e2e2e; font-family: georgia;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: medium;&quot;&gt;&lt;b&gt;The output of modified binary&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;A benefit of GOT hijacking is that it’s straightforward and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;.got.plt is writable at runtime.&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;As a result, GOT hijacking is a popular technique for exploits that aim to change the behavior of a running process (Ex:- Dynamic Instrumentation).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Instead of changing the function address stored in a GOT entry used by a PLT stub, you change the PLT stub itself. Because this technique involves changing the PLT, which is a code section, it’s not suitable for modifying a binary’s behavior at runtime.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;3.&amp;nbsp;Redirecting Direct and Indirect Calls:-&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;So far, we’ve learned how to run injected code at the start or end of a binary or when a library function is invoked. But when we want to use an injected function to replace a nonlibrary function, hijacking a GOT or PLT entry doesn’t work. In that case, we can use a disassembler to locate the calls we want to modify and then overwrite them, using a hex editor to replace them with calls to the injected function instead of the original.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The hex editing process is the same as for modifying a PLT entry. When redirecting an indirect call (as opposed to a direct one), the easiest way is to replace the indirect call with a direct one. However, this isn’t always possible since the encoding of the direct call may be longer than the encoding of the indirect call. In that case, we’ll first need to find the address of the indirectly called function that we want to replace, for instance, by using gdb to set a breakpoint on the indirect call instruction and inspecting the target address.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Once we know the address of the function to replace, we can use objdump or a hex editor to search for the address in the binary’s .rodata section. If we&#39;re lucky, this may reveal a function pointer containing the target address. We can then use a hex editor to overwrite this function pointer, setting it to the address of the injected code. If we&#39;re unlucky, the function pointer may be computed in some way at runtime, requiring more complex hex editing to replace the computed target with the address of the injected function.&lt;/span&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/93740025971512780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/93740025971512780'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2021/08/binary-analysispart-4-binary-hacking.html' title='BINARY ANALYSIS(PART 4): BINARY HACKING'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiglmxCW02AAgRfa9volNvbZNO8UqL2cr88WLQGHwGpJwjaPS3usB-LOHPntawryhyr-gPReiuApnl7m1uYRYoJiO6cIiiWqN0Uk6-4MLFJOJbu-sKQTPKaeZhBjLJxJy6XTpLD1T1VLhY/s72-c/Binary_hack+%25286%2529.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-6560825158288557945</id><published>2021-05-31T22:24:00.004-07:00</published><updated>2021-09-09T21:56:04.307-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Binary Hacking"/><title type='text'>BINARY ANALYSIS(PART 3): INSIDE A BINARY</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In the &lt;a href=&quot;https://linuxbaya.blogspot.com/2021/05/binary-analysispart-2-inside-binary.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt;, we discussed the executable header and the section header. Now we are familiar with the structure of the section header, let’s discuss the sections and the program header in this post.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;&lt;b&gt;3. Sections&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Sections are basically classified into two parts, data, and code. Where the data section contains variables and program data, these sections are writable but the code section only contains instruction bits, so it is marked as nonwritable to avoid any kind of vulnerability attack. The below image specifies the sections found in a &quot;Hello World&quot; program ELF binary compiled by gcc version 4.8.5.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK2iwva_YMEJERZa6dZLNP7e2F5YBeE4oTaNdcwZZbCodcZvnvqiJk6URdhCqKuc1E-VBO7mjVIGf2xD3oZf-vYOxnW2WDLD02tJouWo0vw3FZ7zvarGbOGHKZ-QcUuWQXoGdYszucF2M/s1208/Sections--wide.PNG&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;Sections in an executable ELF&quot; border=&quot;0&quot; data-original-height=&quot;825&quot; data-original-width=&quot;1208&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK2iwva_YMEJERZa6dZLNP7e2F5YBeE4oTaNdcwZZbCodcZvnvqiJk6URdhCqKuc1E-VBO7mjVIGf2xD3oZf-vYOxnW2WDLD02tJouWo0vw3FZ7zvarGbOGHKZ-QcUuWQXoGdYszucF2M/s16000/Sections--wide.PNG&quot; title=&quot;Sections in an executable ELF&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;&lt;b&gt;List of sections in an executable ELF&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The readelf output shows the relevant basic information of each section, including the index (in the section header table), name, and type, virtual address, file offset, and size in bytes of the section. For sections containing a table (such as symbol tables and relocation tables), there’s also a column showing the size of each table entry. Finally, readelf also shows the relevant flags for each section, as well as the index of the linked section (if any), additional information specific to the section type, and alignment requirements. Here we will only cover some important sections instead of all.&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .init and .fini Sections&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .init section (index 11) contains executable code that performs initialization tasks and needs to run before transferring control to the main entry point of the binary. Thus, if you’re familiar with object-oriented programming, you can think of this section as a constructor. The .fini section (index 14) is analogous to the .init section, except that it runs after the main program completes, essentially functioning as a kind of destructor.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .text Section&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .text section (index 13) is where the main code of the program resides. The .text section has the type SHT_PROGBITS&amp;nbsp; because it contains user-defined code and also the section flags indicate that the section is executable but not writable.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In general, executable sections should almost never be writable (and vice versa) because it would make it easier for an attacker to exploit the vulnerability to modify the program&#39;s behavior by directly overwriting the code.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Besides the application-specific code, the .text section contains a number of standard functions that perform initialization and finalization tasks, such as _start, register_tm_clones, and frame_dummy. For now, Let&#39;s see how control goes to the main from _start function.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_MPWpexvoIATS-jQgorwtgydWj42j1r06Df3qLPSJUyk4IQ7G8GsB_frPxJ3toOe6k4M1-Aqpq9PgKRgDyZMjLyYGnc0WYSZRP5SR_FMemjAcI7VIOYmTJgI9oFYec13c0nFmNhmjZb4/s972/dot_text_main.PNG&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;main function&quot; border=&quot;0&quot; data-original-height=&quot;414&quot; data-original-width=&quot;972&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_MPWpexvoIATS-jQgorwtgydWj42j1r06Df3qLPSJUyk4IQ7G8GsB_frPxJ3toOe6k4M1-Aqpq9PgKRgDyZMjLyYGnc0WYSZRP5SR_FMemjAcI7VIOYmTJgI9oFYec13c0nFmNhmjZb4/s16000/dot_text_main.PNG&quot; title=&quot;main function&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;&lt;b&gt;Part of .text section&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;When you write a C program, there’s always the main function where your program begins. But if you inspect the entry point of the binary(you can refer to the output of readelf -h a.out from PART 2), you’ll find that it doesn’t point to main at address 0x40052d. Instead, it points to address 0x400440, the beginning of _start. So, how does execution eventually reach the main?&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOyXzfrCL95lsMnsMsWZNdTmBhScyDhCt8NvFzpedn9j8g6PtlqBSanjObc-w2eJnjUozGLsIxSahsYjH1JkoiqctzdKRZSZ_liQ5J-LHqapEkCH6m_DgCQNOlp_F9cxKyIRIfrnS0nz8/s1023/dot_text_start.PNG&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;_start function&quot; border=&quot;0&quot; data-original-height=&quot;520&quot; data-original-width=&quot;1023&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOyXzfrCL95lsMnsMsWZNdTmBhScyDhCt8NvFzpedn9j8g6PtlqBSanjObc-w2eJnjUozGLsIxSahsYjH1JkoiqctzdKRZSZ_liQ5J-LHqapEkCH6m_DgCQNOlp_F9cxKyIRIfrnS0nz8/s16000/dot_text_start.PNG&quot; title=&quot;_start function&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;&lt;b&gt;Start of .text section&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If you look closely at the _start function it contains an instruction at address 0x40045d which moves the address of main into the rdi register, which is used to pass parameters to function calls on x64 platforms. Then, _start calls a function called __libc_start_main. It resides in the .plt section, which is part of a shared library. The function __libc_start_main finally calls the address of the main to begin the execution of user-defined code.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .bss, .data, and .rodata Sections&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Since code sections are generally not writable, the variables are placed in one or more dedicated sections, which are writable. Constant data is usually also kept in its own section to keep the binary neatly organized. This can make clear which bytes represent instructions and which represent data.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The not writable .rodata section, which stands for “read-only data,” is dedicated to storing constant values. The default values of initialized variables are stored in the .data section, which is marked as writable since the values of variables may change at runtime.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Finally, the writable .bss section stands for “block started by symbol” reserves space for uninitialized variables. The .bss section has type SHT_NOBITS unlike .rodata and .data, which have type SHT_PROGBITS. This is because .bss doesn’t occupy any bytes in the binary as it exists on disk, it’s simply a directive to allocate a block of memory for uninitialized variables when setting up an execution environment for the binary. Typically, variables that live in .bss are zero-initialized.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .plt, .got, and .got.plt Sections and lazy binding&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .plt(Procedure Linkage Table) is a code section that contains executable code, just like .text, while .got(Global Offset Table) is a data section. ELF binaries often contain a separate GOT section called .got.plt for use in conjunction with .plt in the lazy binding process.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipNCkOJcVbDW2t_x6z_0Wz1lfOVpYyjAi-VYWKH6qkBnrjlAcNlaeTJfsEB5WEjG5xyzTYnbrXwDZgSl6L0TGeSAk_HkU1rxANciBjAzfOAX-Wdv2SUBmwvGfGzhJU1skJviMEZt2eeJI/s1921/got.ptl+%25282%2529.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;Dynamically Resolving a Library Function Using the PLT&quot; border=&quot;0&quot; data-original-height=&quot;1041&quot; data-original-width=&quot;1921&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipNCkOJcVbDW2t_x6z_0Wz1lfOVpYyjAi-VYWKH6qkBnrjlAcNlaeTJfsEB5WEjG5xyzTYnbrXwDZgSl6L0TGeSAk_HkU1rxANciBjAzfOAX-Wdv2SUBmwvGfGzhJU1skJviMEZt2eeJI/s16000/got.ptl+%25282%2529.png&quot; title=&quot;Dynamically Resolving a Library Function Using the PLT&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium; text-align: justify;&quot;&gt;&lt;b&gt;Dynamically Resolving a Library Function Using the PLT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;To understand the above lazy binding flow, let’s take an example of calling the puts function from libc library. It makes a call to the corresponding PLT stub, puts@plt &lt;b&gt;(step 1)&lt;/b&gt;. The PLT stub begins with an indirect jump instruction, which jumps to an address stored in the .got.plt section &lt;b&gt;(step 2)&lt;/b&gt;. Initially, before the lazy binding has happened, this address is simply the address of the next instruction in the function stub, which is a push instruction. Thus, the indirect jump simply transfers control to the instruction directly after it &lt;b&gt;(step 3)&lt;/b&gt;. The push instruction pushes an integer (in this case, 0x0) onto the stack that serves as an identifier for the PLT stub. Subsequently, the next instruction jumps to the common default stub shared among all PLT function stubs &lt;b&gt;(step 4)&lt;/b&gt;. The default stub pushes another identifier (taken from the GOT), identifying the executable itself, and then jumps (indirectly, again through the GOT) to the dynamic linker &lt;b&gt;(step 5)&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Using the identifiers pushed by the PLT stubs, the dynamic linker figures out that it should resolve the address of puts, then looks up the address at which the puts function is located in the library and plugs the address of that function into the GOT entry associated with puts@plt. At this point, the lazy binding process is complete. For any subsequent calls to puts@plt, the GOT entry already contains the appropriate (patched) address of puts so that the jump at the start of the PLT stub goes directly to puts without involving the dynamic linker (step 6).&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .dynamic Section&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .dynamic section functions is a “road map” for the operating system and dynamic linker when loading and setting up an ELF binary for execution.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-4CD-Ity77i18dtFCCVMwOibNRE4-EJ7ZgaA1G7POybKrKabsCY88rDXTRD5VFfCSw3hDLU2TH0eI_8C8aFa19FBHJYnQPoOgGjK8zbt3sAVa_6eZbS-RK8PVBM-k2O_u7FMEPvt4_c4/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;594&quot; data-original-width=&quot;771&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-4CD-Ity77i18dtFCCVMwOibNRE4-EJ7ZgaA1G7POybKrKabsCY88rDXTRD5VFfCSw3hDLU2TH0eI_8C8aFa19FBHJYnQPoOgGjK8zbt3sAVa_6eZbS-RK8PVBM-k2O_u7FMEPvt4_c4/s16000/image.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: medium;&quot;&gt;&lt;b&gt;Dynamic section&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Tags of type DT_NEEDED inform the dynamic linker about the dependencies of the executable. For instance, the binary uses the puts function from the libc.so.6 shared library, so it needs to be loaded when executing the binary. the .dynamic section also contains pointers to other important information required by the dynamic linker (for instance, the dynamic string table, dynamic symbol table, .got.plt section, and dynamic relocation section pointed to by tags of type DT_STRTAB, DT_SYMTAB, DT_PLTGOT, and DT_RELA, respectively). The DT_VERNEED and DT_VERNEEDNUM tags specify the starting address.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .init_array and .fini_array Sections&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .init_array is a data section that can contain as many function pointers used as constructors. Each of these functions is called when the binary is initialized before the main is called. In GCC, you can mark functions in your C source files as constructors by declaring them with __attribute__((constructor)). The .fini_array contains pointers to destructors rather than constructors. The pointers contained in .init_array and .fini_array can be changed to modify its behavior. Binaries produced by older GCC versions may contain sections called .ctors and .dtors instead of .init_array and .fini_array.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .shstrtab, .symtab, .strtab, .dynsym, and .dynstr Sections&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The .shstrtab section contains the names of all the sections in the binary to allow tools like readelf to find out the names of the sections. The .symtab section is the main symbol table used in compile-time linking or runtime debugging. The symbol names (as NULL-terminated strings) are stored in .strtab section. .dynsym and .dynstr sections are analogous to .symtab and .strtab, except that they contain symbols and strings needed for dynamic linking rather than static linking.&amp;nbsp; Command &quot;readelf --wide --syms a.out&quot; can be used to see the static and dynamic symbol strings.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;4. Program Headers&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The Program Headers are used during execution (ELF&#39;s &quot;execution view&quot;), as opposed to the section view provided by the section header table. It tells the kernel or the runtime linker what to load into virtual memory and how to find dynamic linking information.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;288&quot; data-original-width=&quot;787&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpWoaqG8dS5E0HuQy7JRJkdc7jyFXBLP3x5hOuf3bn0Ps-h0BeXI6i-tbeUq33-10akIYdT5Jt4NOEDk9_EoWp-6zsdfL_LkiNxHDJLL2_tu7V7vwhLn6SJMeRL8VK-djGgsqIAnL5h0Y/s16000/image.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Program header structure&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;The p_type Field&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The p_type field identifies the type of the segment. Important values for this field include PT_LOAD, PT_DYNAMIC, and PT_INTERP. Segments of type PT_LOAD, as the name implies, are intended to be loaded into memory when setting up the process. The size of the loadable chunk and the address to load it at are described in the rest of the program header. As you can see in the readelf output, there are usually at least two PT_LOAD segments—one encompassing the nonwritable sections and one containing the writable data sections. The PT_INTERP segment contains the .interp section, which provides the name of the interpreter that is to be used to load the binary. In turn, the PT_DYNAMIC segment contains the .dynamic section, which tells the interpreter how to parse and prepare the binary for execution. It’s also worth mentioning the PT_PHDR segment, which encompasses the program header table.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;749&quot; data-original-width=&quot;1556&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha8aH_gvRmpY6K7wnkNbwhXNeeVbxYgLOIAhjia7ilhWcr363gtw5udTxPMnF0A2eich6bMRWFDANv5DgUDhlhsq9uMwEKHMOQ-DH03NRswMyjAdv4q4GQU_m1QReMinxAITJxtomlZME/s16000/program+header.PNG&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Program headers and the segment map view&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha8aH_gvRmpY6K7wnkNbwhXNeeVbxYgLOIAhjia7ilhWcr363gtw5udTxPMnF0A2eich6bMRWFDANv5DgUDhlhsq9uMwEKHMOQ-DH03NRswMyjAdv4q4GQU_m1QReMinxAITJxtomlZME/s1556/program+header.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The p_flags Field&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The flags specify the runtime access permissions for the segment. Three important types of flags exist: PF_X, PF_W, and PF_R to specify the segments are executable, writable, and readable respectively.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The p_offset, p_vaddr, p_paddr, p_filesz, and p_memsz Fields&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The p_offset, p_vaddr, and p_filesz fields specify the file offset at which the segment starts, the virtual address at which it is to be loaded, and the file size of the segment, respectively. most of the cases p_filesz and p_memsz are the same*.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The p_align Field&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The p_align field indicates the required memory alignment (in bytes) for the segment.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6560825158288557945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6560825158288557945'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2021/05/binary-analysispart-3-inside-binary.html' title='BINARY ANALYSIS(PART 3): INSIDE A BINARY'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK2iwva_YMEJERZa6dZLNP7e2F5YBeE4oTaNdcwZZbCodcZvnvqiJk6URdhCqKuc1E-VBO7mjVIGf2xD3oZf-vYOxnW2WDLD02tJouWo0vw3FZ7zvarGbOGHKZ-QcUuWQXoGdYszucF2M/s72-c/Sections--wide.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-5332583607847551064</id><published>2021-05-23T06:02:00.006-07:00</published><updated>2021-09-09T21:56:30.852-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Binary Hacking"/><title type='text'>BINARY ANALYSIS(PART 2): INSIDE A BINARY</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Now that we have a high-level idea of what binaries look like and how they work, we’re ready to dive into a real binary format. Executable and Linkable Format (ELF) is the default binary format on Linux-based systems and Portable Executable (PE) format is on Windows system. But in this series, we will discuss the Linux-based ELF format. ELF is used for executable files, object files, shared libraries, and core dumps. we’ll focus on ELF executables here, but the same concepts apply to other ELF file types.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Let&#39;s take a look at ELF binary inner view.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvfqJgpgo2uSKzy1EZpTc-R4ZNDh6gfKM2ka02HleDtXdDClLVyUPssw_EOWAvmfcW3noNk4PNZighjk-VM9Dbgwg6sSsJel9Vf-oz0M1XxRKI9oL71Svn-TXzJBFDJl9Ei8mQ5H5h_Is/s2048/inside_binary+%25282%2529.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1267&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvfqJgpgo2uSKzy1EZpTc-R4ZNDh6gfKM2ka02HleDtXdDClLVyUPssw_EOWAvmfcW3noNk4PNZighjk-VM9Dbgwg6sSsJel9Vf-oz0M1XxRKI9oL71Svn-TXzJBFDJl9Ei8mQ5H5h_Is/s16000/inside_binary+%25282%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;&lt;b&gt;1. Executable header:&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Every ELF file starts with an executable header, which is just a structured series of bytes telling you that it’s an ELF file, what kind of ELF file it is, and wherein the file to find all the other contents. The below figure shows the type definition for the 64-bit ELF executable header from /usr/include/elf.h.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivkp9uq9KmpaaWkHhwHA7UAwZwSj7ZCL60K4VCYTA-rI96tfh9-lnewdtTvteQcF-Ji19nEllbsjiTGojyHkDdmL8jHe99pF8ElhQYj6MdwqISt_90AFV6Kgcer29sYSs5nfpQHWtU6xY/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;434&quot; data-original-width=&quot;925&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivkp9uq9KmpaaWkHhwHA7UAwZwSj7ZCL60K4VCYTA-rI96tfh9-lnewdtTvteQcF-Ji19nEllbsjiTGojyHkDdmL8jHe99pF8ElhQYj6MdwqISt_90AFV6Kgcer29sYSs5nfpQHWtU6xY/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;e_ident:&lt;/b&gt; The executable header (and the ELF file) starts with a 16-byte array called e_ident. The e_ident array always starts with a 4-byte “magic value” identifying the file as an ELF binary. The magic value consists of the hexadecimal number 0x7f, followed by the ASCII character codes for the letters E, L, and F. Having these bytes right at the start is convenient because it allows tools such as a file, as well as specialized tools such as the binary loader, to quickly discover that they’re dealing with an ELF file.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfxxnvMW_MpwCaWxdk4PommbFzs-d06HB7yOOizT91aI12kEc3x4Uk-DaLFOLBn-6ZSZ6QQdXGyHCtwvRDgddW-5KLK9oaitJ38AP17MhGcPhAPhrIR-aDg2YMEBwYFKU2G9k9yF-7jcU/s672/e_ident.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;223&quot; data-original-width=&quot;672&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfxxnvMW_MpwCaWxdk4PommbFzs-d06HB7yOOizT91aI12kEc3x4Uk-DaLFOLBn-6ZSZ6QQdXGyHCtwvRDgddW-5KLK9oaitJ38AP17MhGcPhAPhrIR-aDg2YMEBwYFKU2G9k9yF-7jcU/s16000/e_ident.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The EI_CLASS byte really denotes is whether the binary is for a 32-bit or 64-bit architecture. In the former case, the EI_CLASS byte is set to the constant ELFCLASS32 (which is equal to 1), while in the latter case, it’s set to ELFCLASS64 (equal to 2).&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The EI_DATA byte indicates the endianness of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the binary. A value of ELFDATA2LSB (equal to 1) indicates a little-endian, while&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;ELFDATA2MSB (equal to 2) means a big-endian.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The EI_VERSION indicates the version of the ELF specification&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;used when creating the binary. Currently, the only valid value is&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;EV_CURRENT, which is defined to be equal to 1.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;he EI_OSABI and EI_ABIVERSION bytes denote information regarding&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the application binary interface (ABI) and operating system (OS) for&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;which the binary was compiled. If the EI_OSABI byte is set to nonzero, it&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;means that some ABI- or OS-specific extensions are used in the ELF file&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;. The default value of zero indicates&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;that the binary targets the UNIX System V ABI.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The EI_ABIVERSION byte&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;denotes the specific version of the ABI indicated in the EI_OSABI byte that the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;binary targets. You’ll usually see this set to zero because it’s not necessary to&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;specify any version information when the default EI_OSABI is used.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The EI_PAD field(9 - 15) actually&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;reserved for possible future use but currently set to zero.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;You can see the e_ident array of any ELF binary by using readelf.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVRE2m6kcOeh_IwoQQtwxEeg2zh6SnXCSUg-isZaF6PIjFXY44ZHnEEN-U_b1aciqY5mU-guEmCoqsjSoqvvgec2kd1CdigKPVhQZX5tMwpUo1O3f1ckGx37_1lhYM8-dL5SyvdYZQoD8/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;507&quot; data-original-width=&quot;912&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVRE2m6kcOeh_IwoQQtwxEeg2zh6SnXCSUg-isZaF6PIjFXY44ZHnEEN-U_b1aciqY5mU-guEmCoqsjSoqvvgec2kd1CdigKPVhQZX5tMwpUo1O3f1ckGx37_1lhYM8-dL5SyvdYZQoD8/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The e_ident array is shown on the line marked Magic. It&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;starts with the familiar four magic bytes, followed by a value of 2 (indicating&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;ELFCLASS64), then a 1 (ELFDATA2LSB), and finally another 1 (EV_CURRENT).&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The remaining bytes are all zeroed out since the EI_OSABI and EI_ABIVERSION&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;bytes are at their default values; the padding bytes are all set to zero as well.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The information contained in some of the bytes is explicitly repeated on&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;dedicated lines, marked Class, Data, Version, OS/ABI, and ABI Version, respectively.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_type:&lt;/b&gt; It specifies the type of the binary. It could be&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;ET_REL (indicating a relocatable object file),&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;ET_EXEC (an executable binary), and ET_DYN (a dynamic library, also called a&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;shared object file).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_machine:&lt;/b&gt;&amp;nbsp; which denotes the architecture that&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the binary is intended to run on. Here it set to&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;EM_X86_64&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;. Other values include EM_386&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;(32-bit x86) and EM_ARM (for ARM binaries).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_version:&lt;/b&gt;&amp;nbsp;This field serves the same role as the EI_VERSION byte in the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;e_ident array.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_entry:&lt;/b&gt; This field denotes the entry point of the binary; this is the virtual&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;address at which execution should start, which means&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;where the interpreter (typically&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;ld-linux.so) will transfer control after it finishes loading the binary into&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;virtual memory.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_phoff:&lt;/b&gt;&amp;nbsp; This indicates the file offsets to the beginning of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the program header table, which means the number of bytes you should&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;read into the file to get to the header.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_shoff:&lt;/b&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;This indicates the file offsets to the beginning of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the section header table.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_flags:&lt;/b&gt; This field provides room for flags specific to the architecture for&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;which the binary is compiled. &lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;For x86 binaries, e_flags is typically set to zero.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_ehsize:&lt;/b&gt; This field specifies the size of the executable header, in bytes. For&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;64-bit x86 binaries, the executable header size is always 64 bytes, as you can&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;see in the readelf output, while it’s 52 bytes for 32-bit x86 binaries.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;e_phnum:&lt;/b&gt; Number of program header in the binary.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;e_phentsize:&lt;/b&gt;&amp;nbsp; Size of each program header.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;e_shnum:&lt;/b&gt; Number of section header&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;in the binary.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;e_shentsize:&lt;/b&gt; Size of each section header.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;e_shstrndx:&lt;/b&gt; This field contains the index (in the section header table) of the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;header associated with a special string table section, called .shstrtab&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;which stores the names of all the sections in the binary.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizM_lUNwqD2PzlXbdkKn0y9KQDJcdtVin_sakhxykvZT4me-643qgo1B41cJz2kSc0LKmWNrPGLTMSf-EkjeVHCVVfNrZnAigeBg1ECfxJulVNFhoRalHLxErtQHs0vC63O0JsPwGlp7o/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;497&quot; data-original-width=&quot;826&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizM_lUNwqD2PzlXbdkKn0y9KQDJcdtVin_sakhxykvZT4me-643qgo1B41cJz2kSc0LKmWNrPGLTMSf-EkjeVHCVVfNrZnAigeBg1ECfxJulVNFhoRalHLxErtQHs0vC63O0JsPwGlp7o/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;To make the following discussion easier to follow, we’ll discuss&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;section headers and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;sections before program headers.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: x-large;&quot;&gt;&lt;b&gt;2. Section Headers:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The code and data in an ELF binary are logically divided into contiguous&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;non-overlapping chunks called sections. Sections don’t have any predetermined&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;structure. So t&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;he properties&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;of the section&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;are described by a section header, which &lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;allows you to locate the bytes belonging to the section.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Let’s begin by discussing the format of the section headers.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoLUgo-HEvWmsY4jS5aNvCEFF6DST0oeJRcyTQXPkcNpF0ZqwTNj7S8g6c4miWz2VsMxSJEyp4R3pCoCzB7PTgY06qPOUfc5n1qtdalqy87ibXfRXYVzA5tFq6cc7N0WSNPK-L-d3HH8/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;337&quot; data-original-width=&quot;956&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpoLUgo-HEvWmsY4jS5aNvCEFF6DST0oeJRcyTQXPkcNpF0ZqwTNj7S8g6c4miWz2VsMxSJEyp4R3pCoCzB7PTgY06qPOUfc5n1qtdalqy87ibXfRXYVzA5tFq6cc7N0WSNPK-L-d3HH8/s16000/image.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_name:&lt;/b&gt; Section name (string tbl index).&amp;nbsp;If set, it contains an index into the string table. If the index is zero,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;it means the section doesn’t have a name.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_type:&lt;/b&gt; Section type tells&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the linker something about the structure of a section’s contents. If it is&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;SHT_PROGBITS, then it contains program data, such as machine&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;instructions or constants.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;SHT_SYMTAB for&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;static symbol tables and SHT_DYNSYM for symbol tables used by the dynamic&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;linker and string tables (SHT_STRTAB).&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Sections with type SHT_REL or SHT_RELA&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;contain relocation entries.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Sections of type SHT_DYNAMIC contain information needed for dynamic&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;linking.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_flags:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Section flags describe additional information&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;about a section.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;SHF_WRITE indicates that the section is writable at runtime.&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;The SHF_ALLOC flag indicates that&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the contents of the section are to be loaded into virtual memory when executing&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the binary.&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;Finally, SHF_EXECINSTR tells you that&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;the section contains executable instructions, which is useful to know when&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;disassembling a binary.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_addr:&lt;/b&gt; Section virtual address at execution. Sections that aren’t intended to be&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;loaded into virtual memory have sh_addr&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;value of zero.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_offset:&lt;/b&gt; Section file offset,&amp;nbsp;file&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;offset (in bytes from the start of the file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;sh_size:&lt;/b&gt; Section size in bytes,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_link:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The sh_link field makes the relationships between sections explicit by&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;denoting the index of the related section,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;that the linker needs&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;to know about.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_info:&lt;/b&gt;&amp;nbsp;&lt;span&gt;This&lt;/span&gt;&amp;nbsp;field contains additional information about the section.&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;For instance, for relocation sections, sh_info denotes the index of the section&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;to which the relocations are to be applied.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_addralign:&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Some sections may need to be aligned in memory in a particular way for efficiency&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;of memory accesses. &lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;For instance, if this field&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;is set to 16, it means the base address of the section (as chosen by the linker)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;must be some multiple of 16. The values 0 and 1 are reserved to indicate no&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;special alignment needs.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;b&gt;sh_entsize:&lt;span style=&quot;white-space: pre;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;Some sections, such as symbol tables or relocation tables, contain a table&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;of well-defined data structures (such as Elf64_Sym or Elf64_Rela). For such&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;sections, the sh_entsize field indicates the size in bytes of each entry in the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;table. When the field is unused, it is set to zero.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;The section headers for all sections in the binary are contained in the section&amp;nbsp;&lt;/span&gt;&lt;span&gt;header table.&amp;nbsp;&lt;/span&gt;We will discuss the section and program header in the &lt;a href=&quot;https://linuxbaya.blogspot.com/2021/05/binary-analysispart-3-inside-binary.html&quot; target=&quot;_blank&quot;&gt;next part&lt;/a&gt; not to make this post so long.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/5332583607847551064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/5332583607847551064'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2021/05/binary-analysispart-2-inside-binary.html' title='BINARY ANALYSIS(PART 2): INSIDE A BINARY'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvfqJgpgo2uSKzy1EZpTc-R4ZNDh6gfKM2ka02HleDtXdDClLVyUPssw_EOWAvmfcW3noNk4PNZighjk-VM9Dbgwg6sSsJel9Vf-oz0M1XxRKI9oL71Svn-TXzJBFDJl9Ei8mQ5H5h_Is/s72-c/inside_binary+%25282%2529.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-5075168924116932203</id><published>2021-05-21T03:45:00.001-07:00</published><updated>2021-08-25T08:14:56.990-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Binary Hacking"/><title type='text'>BINARY ANALYSIS(PART 1): BINARY CREATION</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;A binary file is an executable file containing only &quot;0&quot; and &quot;1&quot;. In this series of posts, we are going to analyze the binary file. Every programmer should know how to create binary.&amp;nbsp;Of course, it is not the case that we open an editor, write 1 and 0, and try to execute the file. We need a compiler like gcc, clang, msvc etc. to create a binary file. The compiler creates a binary file from the source files that are written in any programming language.&amp;nbsp;Before we delve deeper into the binary, let&#39;s recall the creation and its loading process in memory for the execution.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQYr3ZyMR1D6lChUzcPO3UsM_BOWAOb9BUad1NnAz8mUIGd9PtImBMdHkW6bj6rR4STCMs9QYpJZs8Hglx8etdJdxCz6unkMa21SJpvpZ2LVkiuPoYx1GxtvdxNUCkOlfiI6ggobp8oFU/s1998/Binary_Analysis+%25283%2529.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;Compilation Process&quot; border=&quot;0&quot; data-original-height=&quot;1051&quot; data-original-width=&quot;1998&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQYr3ZyMR1D6lChUzcPO3UsM_BOWAOb9BUad1NnAz8mUIGd9PtImBMdHkW6bj6rR4STCMs9QYpJZs8Hglx8etdJdxCz6unkMa21SJpvpZ2LVkiuPoYx1GxtvdxNUCkOlfiI6ggobp8oFU/s16000/Binary_Analysis+%25283%2529.png&quot; title=&quot;Compilation Process&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Four stages of the compilation process start with the preprocessing phase by expanding all #define and #include directives in the source file. After the preprocessing phase is complete, all we get inside is pure code that is ready to be compiled. The compilation phase takes the preprocessed code and translates it into assembly language. (Most compilers also perform heavy optimization in this phase, typically configurable as an optimization level through command line switches such as options -O0 through -O3 in gcc. In the assembly phase, we finally get to generate some real machine code! The input of the assembly phase is the set of assembly language files generated in the compilation phase, and the output is a set of object files. We can tell the compiler to stop the compilation process after a particular phase, by providing&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;command-line switches like&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&amp;nbsp;-E, -S, and -c for the preprocessed, compiled, and assembled file, respectively.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZCF_WJ6xrSo6KFmZtniUuNfIWYW37vXzUTtTuWjiSj1VSHcJ5wdj-79paQuVp1Y2GxWVev6tyV4NpGKQauKg3a1rHX66qQC3PqkS11BkLgTNq5qPk5O0-ybllpNPCXn_BNSr_E8F8R6M/s1279/object+file.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;152&quot; data-original-width=&quot;1279&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZCF_WJ6xrSo6KFmZtniUuNfIWYW37vXzUTtTuWjiSj1VSHcJ5wdj-79paQuVp1Y2GxWVev6tyV4NpGKQauKg3a1rHX66qQC3PqkS11BkLgTNq5qPk5O0-ybllpNPCXn_BNSr_E8F8R6M/s16000/object+file.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The term relocatable in the file output tells that you’re dealing with an object file and not with an executable. Object files are compiled independently from each other, so the assembler has no way of knowing the memory addresses of other object files when assembling an object file. That’s why object files need to be relocatable. So we can link them together in any order to make a complete binary executable. If object files were not relocatable, this won&#39;t be possible.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Most compilers, including gcc, automatically call the linker at the end of the compilation process. The linker’s job is to take all the object files belonging to a program and merge them into a single coherent executable, typically intended to be loaded at a particular memory address. Now that the arrangement of all modules in the executable is known, the linker can also resolve most symbolic references. References to libraries may or may not be completely resolved, depending on the type of library.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Static libraries are merged into the binary executable, allowing any references to them to be resolved entirely. There are also dynamic (shared) libraries, which are shared in memory among all programs that run on a system. In other words, rather than copying the library into every binary that uses it, dynamic libraries are loaded into memory only once, and any binary that wants to use the library needs to use this shared copy.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4_MQqA77SjwBrxkLDQIuc_ivOlj9cOEHe_sb9RyNEWL_qyGPDZc2c2KEle9YSI9A56Qmyx6PIDwptymPZzJPzMy_an0-hr8PDMlnjCuIbrz92_pHlFx13iNKsqbA46nY47fPOYiS3Zvc/s1555/executable+file.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;127&quot; data-original-width=&quot;1555&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4_MQqA77SjwBrxkLDQIuc_ivOlj9cOEHe_sb9RyNEWL_qyGPDZc2c2KEle9YSI9A56Qmyx6PIDwptymPZzJPzMy_an0-hr8PDMlnjCuIbrz92_pHlFx13iNKsqbA46nY47fPOYiS3Zvc/s16000/executable+file.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;During the linking phase, the addresses at which dynamic libraries will reside are not yet known, so references to them cannot be resolved. Instead, the linker leaves symbolic references to these libraries even in the final executable, and these references are not resolved until the binary is actually loaded into memory to execute.&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6mObQ_dXmVuqf8XoiIHA5i28Z2335gR8CUoi-HYfTGeDXJT2Uoo9vGsJSgiGNlgeWo1iOb0pgeqxt0jpjVHRqrg7CccuyIEOM5SPyi9QM4utOZrCvNlRDTILI4KeQkjOo43uMGWhHJhQ/s820/Virtual+memory.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;820&quot; data-original-width=&quot;759&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6mObQ_dXmVuqf8XoiIHA5i28Z2335gR8CUoi-HYfTGeDXJT2Uoo9vGsJSgiGNlgeWo1iOb0pgeqxt0jpjVHRqrg7CccuyIEOM5SPyi9QM4utOZrCvNlRDTILI4KeQkjOo43uMGWhHJhQ/s16000/Virtual+memory.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;When you decide to run a binary, the operating system starts by setting up a new process for the program to run in, including a virtual address space.7 Subsequently, the operating system maps an interpreter into the process’s virtual memory. This is a user space program that knows how to load the binary and perform the necessary relocations. On Linux, the interpreter is typically a shared library called ld-linux.so. On Windows, the interpreter functionality is implemented as part of ntdll.dll. After loading the interpreter, the kernel transfers control to it, and the interpreter begins its work in userspace.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The interpreter loads the binary into its virtual address space (the same space in which the interpreter is loaded). It then parses the binary to find out (among other things) which dynamic libraries the binary uses. The interpreter maps these into the virtual address space (using mmap or an equivalent function) and then performs any necessary last-minute relocations in the binary’s code sections to fill in the correct addresses for references to the dynamic libraries. In reality, the process of resolving references to functions in dynamic libraries is often deferred until later. In other words, instead of resolving these references immediately at load time, the interpreter resolves references only when they are invoked for the first time. This is known as &lt;b&gt;lazy binding&lt;/b&gt;. After relocation is complete, the interpreter looks up the entry point of the binary and transfers control to it, beginning normal execution of the binary.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In the next part, we will see what exactly we find inside the executable file.&lt;/span&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/5075168924116932203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/5075168924116932203'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2021/05/binary-analysispart-1-binary-creation.html' title='BINARY ANALYSIS(PART 1): BINARY CREATION'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQYr3ZyMR1D6lChUzcPO3UsM_BOWAOb9BUad1NnAz8mUIGd9PtImBMdHkW6bj6rR4STCMs9QYpJZs8Hglx8etdJdxCz6unkMa21SJpvpZ2LVkiuPoYx1GxtvdxNUCkOlfiI6ggobp8oFU/s72-c/Binary_Analysis+%25283%2529.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-2731599415494313424</id><published>2020-11-14T06:12:00.006-08:00</published><updated>2020-11-15T08:33:10.144-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Embedded System"/><category scheme="http://www.blogger.com/atom/ns#" term="IoT"/><title type='text'>SENSOR DATA VISUALIZATION USING GRAFANA AND MQTT</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In our last post, we have seen how to fetch sensor data from the edgex foundry to the server-side using the Rest API. Here we will discuss how to use the MQTT protocol to get the sensor data and visualize them using Grafana. While this is not a part of EdgeX Foundry, it can be useful to know how to capture, save, and visualize data.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If you don&#39;t have prior knowledge about MQTT for a quick understanding will give an example of an eCommerce website like Amazon or Mytra, if a product goes out of stock then a &lt;b&gt;Notify Me&lt;/b&gt; button will appear instead of &lt;b&gt;Buy Now&lt;/b&gt;.&amp;nbsp; If you press the notify button, it will get you noticed whenever the product will be available.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjICCjFJRS2vhhixjjhLWgLErX8UaipFCNmnY1bv6Cf2FHOmA4sagA-XYpSjvDHAp1Aiah8ehhydT-MUozegP_cgAEjYZvagVr0ynTMkEB0OyuSWJem8umEbwMbacCx-XXKSg5b4mIhrSQ/s1928/mqtt.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1044&quot; data-original-width=&quot;1928&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjICCjFJRS2vhhixjjhLWgLErX8UaipFCNmnY1bv6Cf2FHOmA4sagA-XYpSjvDHAp1Aiah8ehhydT-MUozegP_cgAEjYZvagVr0ynTMkEB0OyuSWJem8umEbwMbacCx-XXKSg5b4mIhrSQ/s16000/mqtt.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;Similarly, MQTT protocol has two clients (at least) like seller and buyer, one who publish the data called the publisher and the other who subscribe to the same data called subscriber and both clients depend on one platform like Amazon called MQTT-Broker who can manage multiple publishers and subscribers. Whenever a publisher publishes or sends data to the broker, the broker&#39;s job is to&lt;/span&gt;&amp;nbsp;immediately&amp;nbsp;send the data to all the subscribers who subscribe to the same publisher topic/data.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Here we are going to do the same process using edgex foundry(publisher), Mosquitto (Broker), and a messenger application(subscriber).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Four new containerized applications will be added to the same VM running EdgeX Foundry for this demo (Or you can use a different VM in the same network). Follow these steps:-&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;These are:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;1. Mosquitto:&lt;/b&gt; A MQTT broker that can be run locally.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Download and run:-&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; color: #111111; font-family: georgia; font-size: large; text-align: left;&quot;&gt;docker pull eclipse-mosquitto&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; color: #111111; font-family: georgia; font-size: large; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; color: #111111; font-family: georgia; font-size: large; text-align: left;&quot;&gt;docker run --name mosquitto -d -p 1883:1883 -p 9001:9001 eclipse-mosquitto&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRQ3KqmIhBJ-cJuVF7OpIYhyhljbK1aykrfjKVIw0Q4-JH6XhnI3cta37Ci0JxKd01QmonXc-fvKMowayOn1Zj2KhJSJZs_EXwxDz80h543e8H36Ji4DH23kCNwsk_6P0nBN4Foe1igQA/s1120/mosquitto.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;136&quot; data-original-width=&quot;1120&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRQ3KqmIhBJ-cJuVF7OpIYhyhljbK1aykrfjKVIw0Q4-JH6XhnI3cta37Ci0JxKd01QmonXc-fvKMowayOn1Zj2KhJSJZs_EXwxDz80h543e8H36Ji4DH23kCNwsk_6P0nBN4Foe1igQA/s16000/mosquitto.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;2. InfluxDB:&lt;/b&gt; A time-series database perfect for capturing sensor data over time. We need to configure it with grafana.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp;Download and run:-&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; color: #111111; text-align: left;&quot;&gt;docker pull influxdb&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; color: #111111; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;docker run \&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;-d \&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;--name influxdb \&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;-p 8086:8086 \&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;-e INFLUXDB_DB=sensordata \&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;-e INFLUXDB_ADMIN_USER=root \&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;-e INFLUXDB_ADMIN_PASSWORD=toor \&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;-e INFLUXDB_HTTP_AUTH_ENABLED=true \&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;influxdb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjirqnju4kpZD_hI9_sFPF-feuuMtsz5Ke6azZptrsWwpKoXykzs86dgiN6mWCQClKhVMGCbymL9amuosItgnm-TQWR9kmqF1QPgm9ruJGlnmKaNwxh_ZOX_30c-gj7-sUYAHFfYFTsm7A/s1122/influxdb.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;184&quot; data-original-width=&quot;1122&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjirqnju4kpZD_hI9_sFPF-feuuMtsz5Ke6azZptrsWwpKoXykzs86dgiN6mWCQClKhVMGCbymL9amuosItgnm-TQWR9kmqF1QPgm9ruJGlnmKaNwxh_ZOX_30c-gj7-sUYAHFfYFTsm7A/s16000/influxdb.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;3. Grafana:&lt;/b&gt; A graphical dashboard which supports InfluxDB&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Download and run:-&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;docker pull grafana/grafana&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee;&quot;&gt;docker run -d --name=grafana -p 3000:3000 grafana/grafana&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2auZQB7OJPRFuLkZRiGrgtxvHgiGgm0W6vY23Bz7UxEPSAphzxJXw5Nm27KT8mzWBibtAtmls4FS_m7IMVBjU3sqZJkWqMBRChWDFW9uHM-1LP6E3TrOyRmvJkEkRSvjfv_XBDE9lHY4/s1119/grafana.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;197&quot; data-original-width=&quot;1119&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2auZQB7OJPRFuLkZRiGrgtxvHgiGgm0W6vY23Bz7UxEPSAphzxJXw5Nm27KT8mzWBibtAtmls4FS_m7IMVBjU3sqZJkWqMBRChWDFW9uHM-1LP6E3TrOyRmvJkEkRSvjfv_XBDE9lHY4/s16000/grafana.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Attach the Influx DB to Grafana:-&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Step1: Open grafana dashboard from browser using &quot;ipaddress:3000&quot;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Step2: It will ask to set a new password.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Step3: Set the influx DB as your first data source.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Step4: Do the following settings:&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; url: &amp;lt;influx db ip&amp;gt;:8086&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; database: sensordata&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; user: root&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; password: toor&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTTaveGeFL-COuzeHLvfqYMdQfV1trPysQrpvGevYfdyFjdbU8ECjkxkI-MecFXCcmjpmhZLe0JnNTh9G4hBr_G3moqIP4vTlSKUoAkBxjZdcScBC-qq_qhSRpN2b6tpZZGwvAWw1FhO4/s951/db+set.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;579&quot; data-original-width=&quot;951&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTTaveGeFL-COuzeHLvfqYMdQfV1trPysQrpvGevYfdyFjdbU8ECjkxkI-MecFXCcmjpmhZLe0JnNTh9G4hBr_G3moqIP4vTlSKUoAkBxjZdcScBC-qq_qhSRpN2b6tpZZGwvAWw1FhO4/s16000/db+set.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;&lt;b&gt;4. Messenger:&lt;/b&gt; A python script in a container that captures MQTT messages and sends&amp;nbsp;&lt;/span&gt;&lt;span&gt;them into the InfluxDB. To run the script inside the container, follow the below steps.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Step1:- Download the file from &lt;a href=&quot;https://drive.google.com/file/d/1buS872Muk_00FVmvdWrFH92yPzEjrrLT/view?usp=sharing&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;,&amp;nbsp;extract it, and go to the subscriber folder.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;Open the file “app.py’ in an editor and replace “mqtt-ip-adderss” with the actual IP address of&amp;nbsp;&lt;/span&gt;&lt;span&gt;the VM where the Mosquitto installed, the &quot;topic-name&quot; with the name of your topic (this should be unique), and the &quot;Influx-ip-address&quot; with IP address of the VM where the Influx Data base installed (Likely the EdgeX Foundry VM IP address in my case).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvdGnH3pMfT3pzNzCjy4sbaSruivRM3hmt5vXYV5nxumMd3PxGdhqQMur9bjhYjR2wl3yClwxsy-ohLWAH8FAV_LDc1cOIuwc-FtfGF6ZbPogNmYVp37Sz318vIgUgdN49wQ5laTk-fIU/s865/app_py.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;394&quot; data-original-width=&quot;865&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvdGnH3pMfT3pzNzCjy4sbaSruivRM3hmt5vXYV5nxumMd3PxGdhqQMur9bjhYjR2wl3yClwxsy-ohLWAH8FAV_LDc1cOIuwc-FtfGF6ZbPogNmYVp37Sz318vIgUgdN49wQ5laTk-fIU/s16000/app_py.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;Note: There are two entries! Don’t use the loopback address (127.0.0.1) as the ports will&amp;nbsp;&lt;/span&gt;&lt;span&gt;clash with the mosquitto MQTT broker.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Step2:- Build the container for the messenger app&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;docker build -t subscriber .&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Note: Make sure to execute the “docker build” command in the&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;“subscriber” directory.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Step3:- Run the messenger app&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #eeeeee; font-family: georgia; font-size: large;&quot;&gt;docker run -d --name subscriber&amp;nbsp;subscriber:latest&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimVI4Z81A5oyukIhTWcbfgx5jzdyQ79KW2LnWr3VLzMx1fDNgkf3N2TfEKd8-7J_cUCPUDpWytG8M0aesve64nkkpdywd7OD9SWZXktCJsxeySqsCTD-ku2AvCuBxrzEyX871jfI24dsI/s1305/subscriber+image.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;525&quot; data-original-width=&quot;1305&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimVI4Z81A5oyukIhTWcbfgx5jzdyQ79KW2LnWr3VLzMx1fDNgkf3N2TfEKd8-7J_cUCPUDpWytG8M0aesve64nkkpdywd7OD9SWZXktCJsxeySqsCTD-ku2AvCuBxrzEyX871jfI24dsI/s16000/subscriber+image.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Now all four containers are running.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Go to the Edgex setup and add the below service to the docker-compose.yml file to run mqtt on edgex.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: times; font-size: medium;&quot;&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; app-service-mqtt:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; image: edgexfoundry/docker-app-service-configurable:1.1.0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ports:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - &quot;0.0.0.0:48101:48101&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; container_name: edgex-app-service-configurable-mqtt&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; hostname: edgex-app-service-configurable-mqtt&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; networks:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edgex-network:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; aliases:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - edgex-app-service-configurable-mqtt&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; environment:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;&amp;lt;: *common-variables&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edgex_profile: mqtt-export&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Service_Host: edgex-app-service-configurable-mqtt&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Service_Port: 48101&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MessageBus_SubscribeHost_Host: edgex-core-data&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Binding_PublishTopic: events&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Added for MQTT export using app service&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_ADDRESS: &quot;mqtt-broker-ip&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_PORT: 1883&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_PROTOCOL: tcp&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_TOPIC: &quot;topic-name&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_PARAMETERS_AUTORECONNECT: &quot;true&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_PARAMETERS_RETAIN: &quot;true&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_PARAMETERS_PERSISTONERROR: &quot;false&quot;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_PUBLISHER:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_USER:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_PASSWORD:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_PARAMETERS_QOS: [&quot;your quality or service&quot;]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_PARAMETERS_KEY: [your Key]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_PARAMETERS_CERT: [your Certificate]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; depends_on:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - consul&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; #&amp;nbsp; &amp;nbsp; &amp;nbsp; - logging&amp;nbsp; # uncomment if re-enabled remote logging&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - data&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Or download the updated docker-compose.yml file from &lt;a href=&quot;https://drive.google.com/file/d/1MXRNm32wUYBib-gYPyrOrrMIULT_Xf9C/view?usp=sharing&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;And replace the &quot;mqtt-broker-ip&quot; with your VM IP where the mosquitto broker is installed. And the &quot;topic-name&quot; with your unique topic.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Note:- Topic name should be same in both app.py and docker-compose.yml.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWXDKKrK4-Bsbbt8xbNryCAY5CRgP5LCql6WRQtfJWEqy61qSej-diCDABNsrqPPuSnsrwdtyl2ln_B40hy_rD-wDtUovvYx6WOML8lN2Y2C8wgA-dJjcEI2IQpXS5iEWzChEHZUHLr5s/s866/mqtt-edgex-service.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;526&quot; data-original-width=&quot;866&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWXDKKrK4-Bsbbt8xbNryCAY5CRgP5LCql6WRQtfJWEqy61qSej-diCDABNsrqPPuSnsrwdtyl2ln_B40hy_rD-wDtUovvYx6WOML8lN2Y2C8wgA-dJjcEI2IQpXS5iEWzChEHZUHLr5s/s16000/mqtt-edgex-service.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Now run the same &lt;a href=&quot;https://drive.google.com/file/d/1kR2RG7_knZ7rF3JaLgJWNqAU4SRFPcrJ/view?usp=sharing&quot;&gt;python script&lt;/a&gt; to get sensor data and send it to edgex foundry used in the &lt;a href=&quot;https://linuxbaya.blogspot.com/2020/09/sending-sensor-data-to-server-using.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt;. (&lt;a href=&quot;https://www.youtube.com/watch?v=OW6PvN9HAZ0&quot; target=&quot;_blank&quot;&gt;Watch the demo video&lt;/a&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuTcjXkIVJs5AkosuVXMzlE-_ft-iIPPTa38jlsahwEcJZ16uVwQFWGVr3HsrJwe_r47fE0gA6zXAMRp_FR_nR8gaxB0M6AOVO2fluYWfYkZqkz2raV2erj2kTh74O8kHioXFm0R7UwJo/s598/pythonScript.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;292&quot; data-original-width=&quot;598&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuTcjXkIVJs5AkosuVXMzlE-_ft-iIPPTa38jlsahwEcJZ16uVwQFWGVr3HsrJwe_r47fE0gA6zXAMRp_FR_nR8gaxB0M6AOVO2fluYWfYkZqkz2raV2erj2kTh74O8kHioXFm0R7UwJo/s16000/pythonScript.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;After the script runs you can create a panel in Grafana to see the collected sensor data with the following settings.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2K0hVpEhKyVlxjfjGcqM6FKMEf0y_K88A0K7Qi5Nx0MctAktikx_wB8B3R9S2LS2ei3B-Kdm1kyUgfbPR1nX9CGmpboOkli-P7YvRlzZS3ZBIiUEOAMGMpWMDvSE7edh1PR2NCLnFCTc/s1363/grafana+panel.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;626&quot; data-original-width=&quot;1363&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2K0hVpEhKyVlxjfjGcqM6FKMEf0y_K88A0K7Qi5Nx0MctAktikx_wB8B3R9S2LS2ei3B-Kdm1kyUgfbPR1nX9CGmpboOkli-P7YvRlzZS3ZBIiUEOAMGMpWMDvSE7edh1PR2NCLnFCTc/s16000/grafana+panel.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;Same you can create for Temperature data.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4sSRpGVWVdjNNh51NpB0hQPfD4zTSSGvOrFo8qdH-sUOx51TzZqH30S-UYWYEnjWRN-ZaFmr4E9UkCD8rnGfwMLypSaGpe6wgfOmCT-zkuk_QVsDwTetm8KnWRRjPGEsNK4aNxoxD95Q/s1366/grafana+panel_1.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;655&quot; data-original-width=&quot;1366&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4sSRpGVWVdjNNh51NpB0hQPfD4zTSSGvOrFo8qdH-sUOx51TzZqH30S-UYWYEnjWRN-ZaFmr4E9UkCD8rnGfwMLypSaGpe6wgfOmCT-zkuk_QVsDwTetm8KnWRRjPGEsNK4aNxoxD95Q/s16000/grafana+panel_1.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The summary of the data flow will be:-&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;1. Data goes from sensor to edgex by an HTTP request.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;2. MQTT client(publisher) on edgex will be sending the real-time data to the MQTT broker(Mosquitto).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;3. Another MQTT client (Subscriber) on messenger will get the sensor data and send it to the Influx database.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;4. Grafana dashboard will show you the real-time data structure that is updating frequently to the influx database.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Here is the video demonstration of this post:-&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;

&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;384&quot; src=&quot;https://www.youtube.com/embed/G3D748Lc52w&quot; width=&quot;683&quot;&gt;&lt;/iframe&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;This is how the MQTT protocol is useful for the Edgex foundry service.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2731599415494313424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2731599415494313424'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/11/sensor-data-visualization-using-mqtt-and-grafana.html' title='SENSOR DATA VISUALIZATION USING GRAFANA AND MQTT'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjICCjFJRS2vhhixjjhLWgLErX8UaipFCNmnY1bv6Cf2FHOmA4sagA-XYpSjvDHAp1Aiah8ehhydT-MUozegP_cgAEjYZvagVr0ynTMkEB0OyuSWJem8umEbwMbacCx-XXKSg5b4mIhrSQ/s72-c/mqtt.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-6774556717617870003</id><published>2020-09-27T01:55:00.017-07:00</published><updated>2020-11-15T08:38:40.157-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Embedded System"/><category scheme="http://www.blogger.com/atom/ns#" term="IoT"/><title type='text'>SENDING SENSOR DATA TO SERVER  USING EDGEX FOUNDERY</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;From the &lt;a href=&quot;https://linuxbaya.blogspot.com/2020/09/edgex-foundry-and-its-setup.html&quot; target=&quot;_blank&quot;&gt;previous post&lt;/a&gt;, we are clear about the installation and accessing of edgex foundry. Now using that edgex we can send sensor data to the server/cloud or to any devices like smartphones. For example, if we want to control our home IoT devices like light, fan, AC, TV, refrigerator, etc.(Anything that can act as an IoT device) using our smartphone, we can do that also using MQTT protocol. Anyways I will discuss the MQTT pub-sub model and its working mechanism in the next post. Let&#39;s talk about the usage of edgex foundry by one example.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSS4Bt729oPpL4YJbS1N8m9mEBMa-ZGyeI0G71w0wlpy61meK7WPGwiXvndXy4NPxpdyaQ24gOdeYkzxfqz8PJjjqVkTNgW-ZQACfwaJkMQwt9DLm4Pfi2mewbebQs0-IFETUmW6OKHhk/s1927/edgex_sensor_to_server.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1081&quot; data-original-width=&quot;1927&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSS4Bt729oPpL4YJbS1N8m9mEBMa-ZGyeI0G71w0wlpy61meK7WPGwiXvndXy4NPxpdyaQ24gOdeYkzxfqz8PJjjqVkTNgW-ZQACfwaJkMQwt9DLm4Pfi2mewbebQs0-IFETUmW6OKHhk/s16000/edgex_sensor_to_server.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Here I am discussing to send and fetch the sensor data to and from the edgex foundry respectively using the Http service.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In order to send data to edgex first, we need to set up a device on edgex using UI or the rest API. So setting up a device means, let the edgex be aware of the existence of the device, be able to receive data from the device, understand the type and format of data, etc. The following steps are used to set up a device.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Before that make sure the edgex foundry is accessible by its IP address. If not, then you can change the port of all services from &quot;127.0.0.1&quot; to &quot;0.0.0.0&quot; in the docker-composer.yml file and restart all services.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;1. Create value descriptors&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;2. Upload the device profile&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;3. Create the device&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;1. Create value descriptors&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Value descriptors describe a value. They tell EdgeX what format the data comes in and what to label the data with. Here I am creating value descriptors for temperature and humidity values.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Open Postman and use the following values:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Method: POST&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;URI: http://&amp;lt;edgex ip&amp;gt;:48080/api/v1/valuedescriptor&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Payload settings: Set Body to “raw” and “JSON”&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Payload data:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;name&quot;: &quot;humidity&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;description&quot;: &quot;Ambient humidity in percent&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;min&quot;: &quot;0&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;max&quot;: &quot;100&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;type&quot;: &quot;Int64&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;uomLabel&quot;: &quot;humidity&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;defaultValue&quot;: &quot;0&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;formatting&quot;: &quot;%s&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;labels&quot;: [&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;environment&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;humidity&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Tip: Use the very excellent feature “Beautify” on the “Body” tab in Postman to fix any indentation issues with the JSON payload.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmHe7MIXna_TDZ-3z0CQex-qFlYtDFAux0bwQI3bZTuYil5M2UQ9IbHDYX1Twq3OgxCrYTbsdHTOaSgdg7QjoGGwBOi9Big5LlEEpIpm1aZAcUL_Il_5odQ3kkpSJ08u8amMc6ZRAxbcA/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;postman&quot; data-original-height=&quot;562&quot; data-original-width=&quot;1051&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmHe7MIXna_TDZ-3z0CQex-qFlYtDFAux0bwQI3bZTuYil5M2UQ9IbHDYX1Twq3OgxCrYTbsdHTOaSgdg7QjoGGwBOi9Big5LlEEpIpm1aZAcUL_Il_5odQ3kkpSJ08u8amMc6ZRAxbcA/s16000/image.png&quot; title=&quot;postman&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Watch for the return code of “ 200 OK ” and the ID of the newly created value descriptor.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;There is no need to make note of the ID.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Update the body and issue the command again for temperature::&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Method: POST&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;URI: http://&amp;lt;edgex ip&amp;gt;:48080/api/v1/valuedescriptor&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Payload settings: Set Body to “raw” and “JSON”&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Payload data:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;name&quot;: &quot;temperature&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;description&quot;: &quot;Ambient temperature in Celsius&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;min&quot;: &quot;-50&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;max&quot;: &quot;100&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;type&quot;: &quot;Int64&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;uomLabel&quot;: &quot;temperature&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;defaultValue&quot;: &quot;0&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;formatting&quot;: &quot;%s&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;labels&quot;: [&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;environment&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;temperature&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;]&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Viewing value descriptors through Postman&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;2. Upload the device profile&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;EdgeX incorporates device profiles as a way of easily adding new devices. A device profile is essentially a template that describes the device, its data formats, and supported commands. It is a text file written in YAML format which is uploaded to EdgeX and later referenced whenever a new device is created. Only one profile is needed per device type. Some vendors provide pre-written device profiles for their devices. In this case, I am using a custom device template.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Get a copy of the device profile from &lt;a href=&quot;https://drive.google.com/file/d/1hn79wbZ-zjMHrdrIbJ3jDG7OXh3tE8x6/view?usp=sharing&quot; rel=&quot;nofollow&quot;&gt;here&lt;/a&gt;:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In Postman use the following settings:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Method: POST&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;URI: http://&amp;lt;edgexip&amp;gt;:48081/api/v1/deviceprofile/uploadfile&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Payload settings: This part is a bit tricky:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;● Set Body to “form-data”&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;● Hover over KEY and select “File”&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;● Select the yaml file: sensorClusterDeviceProfile.yaml&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;● In the KEY field, enter “file” as key&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Or you can upload the device profile using the UI.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0IbrrEzhr9kMSVH9sUSWMMkkJTFWDsIe4ZCsJnCGcPAqoPhp90x7bZy6wXmkGzvhMZDNP9NWvH_bMtjYHJC9uOiURLYe1W_0BRziSK4jSSNo9F7qQ62-rYlKN3mS4vddpvp-oBvcpRH0/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;edgex device profile&quot; data-original-height=&quot;599&quot; data-original-width=&quot;1331&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0IbrrEzhr9kMSVH9sUSWMMkkJTFWDsIe4ZCsJnCGcPAqoPhp90x7bZy6wXmkGzvhMZDNP9NWvH_bMtjYHJC9uOiURLYe1W_0BRziSK4jSSNo9F7qQ62-rYlKN3mS4vddpvp-oBvcpRH0/s16000/image.png&quot; title=&quot;edgex device profile&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;3. Create the device&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Now EdgeX is finally ready to receive the device creation command in Postman as&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;follows:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Two items are particularly important in this JSON body:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;● The device service “edgex-device-rest” is used since this is a REST device.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;● The profile name “TestSensorData” must match the name in the device profile yaml&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;file uploaded in the previous step.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Feel free to change values for description, location, labels, etc. if desired.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In Postman use the following settings:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Method: POST&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;URI: http://&amp;lt;edgex ip&amp;gt;:48081/api/v1/device&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Payload settings: Set Body to “raw” and “JSON”&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Payload data:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;{&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;name&quot;: &quot;Temp_and_Humidity_sensor_data&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;description&quot;: &quot;DTH11 sensor data&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;adminState&quot;: &quot;unlocked&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;operatingState&quot;: &quot;enabled&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;protocols&quot;: {&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;example&quot;: {&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;host&quot;: &quot;dummy&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;port&quot;: &quot;1234&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;unitID&quot;: &quot;1&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;},&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;labels&quot;: [&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;Humidity sensor&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;Temperature sensor&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;DHT11&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;],&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;location&quot;: &quot;India&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;service&quot;: {&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;name&quot;: &quot;edgex-device-rest&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;},&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;profile&quot;: {&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&quot;name&quot;: &quot;TestSensorData&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3vQBbcGiKEs-iYNf-OHoVvnQaYeL5coBuSNXXw9HRH252cvz9mjrgIbV_kp5T7DocyBKza2P9XXX8jZRGLf5Ak_keQyf8gfMvk51t4vPPUD7At28-FR8-kgPRASluqI56KOA-Ay8PHU0/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;edgex device creation&quot; data-original-height=&quot;558&quot; data-original-width=&quot;1046&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3vQBbcGiKEs-iYNf-OHoVvnQaYeL5coBuSNXXw9HRH252cvz9mjrgIbV_kp5T7DocyBKza2P9XXX8jZRGLf5Ak_keQyf8gfMvk51t4vPPUD7At28-FR8-kgPRASluqI56KOA-Ay8PHU0/s16000/image.png&quot; title=&quot;edgex device creation&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If the above commands completed successfully a new sensor device will have been registered and EdgeX is ready to receive data from it.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Demonstration:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Here I am trying to demonstrate the above things with the below setup but you can use a Raspberry pi for the edge node:-&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv2PBcWzYZyqXZ4selW6tp3jrD55vq-Si5fcPCLHVSSqKebYSCQJzeWCSD0Kq7XSq-mhduaOXbtLN7_EsaIbfSKDadcXhIOKpZ3U_AdVHEuODIdNEtSMDUHRDYb9-zRwuTJR1NBDQRVUw/s1807/edgex_sensor_setup.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;img alt=&quot;edgex setup&quot; border=&quot;0&quot; data-original-height=&quot;929&quot; data-original-width=&quot;1807&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv2PBcWzYZyqXZ4selW6tp3jrD55vq-Si5fcPCLHVSSqKebYSCQJzeWCSD0Kq7XSq-mhduaOXbtLN7_EsaIbfSKDadcXhIOKpZ3U_AdVHEuODIdNEtSMDUHRDYb9-zRwuTJR1NBDQRVUw/s16000/edgex_sensor_setup.png&quot; title=&quot;edgex setup&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Send data:-&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Here I am getting the temperature and humidity data from my host machine(edge node) serial port through the Arduino nano and sending these to data to the edgex foundry using an Http POST request. The Arduino code to get the sensor data and the python code for POST Http request can found here.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The POST command to send data:-&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;http://&amp;lt;edgex ip&amp;gt;:49986/api/v1/resource/Temp_and_Hum&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;idity_sensor_data/temperature&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;You can send the value as payload a&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;nd every POST call make an event count. So you can see that using this URL on your web browser:-&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;http://&amp;lt;edgex ip&amp;gt;:48080/api/v1/event/count&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Fetch data:-&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Making the HTTP GET request from the host machine (which will be acting as a server now) to get the saved data from edgex foundry.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The GET command to fetch the data:-&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;http://&amp;lt;edgex ip&amp;gt;:48080/api/v1/reading&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Here is the video demo of DTH11 sensor:-&lt;/span&gt;&lt;/p&gt;

&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;384&quot; src=&quot;https://www.youtube.com/embed/OW6PvN9HAZ0&quot; width=&quot;683&quot;&gt;&lt;/iframe&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://drive.google.com/file/d/1kR2RG7_knZ7rF3JaLgJWNqAU4SRFPcrJ/view?usp=sharing&quot;&gt;Download&lt;/a&gt; Resources which contains the Arduino and python script shown in the video.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6774556717617870003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6774556717617870003'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/09/sending-sensor-data-to-server-using.html' title='SENDING SENSOR DATA TO SERVER  USING EDGEX FOUNDERY'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSS4Bt729oPpL4YJbS1N8m9mEBMa-ZGyeI0G71w0wlpy61meK7WPGwiXvndXy4NPxpdyaQ24gOdeYkzxfqz8PJjjqVkTNgW-ZQACfwaJkMQwt9DLm4Pfi2mewbebQs0-IFETUmW6OKHhk/s72-c/edgex_sensor_to_server.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-3267858874775604674</id><published>2020-09-22T23:10:00.047-07:00</published><updated>2020-11-15T08:37:33.509-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Embedded System"/><category scheme="http://www.blogger.com/atom/ns#" term="IoT"/><title type='text'>EDGEX FOUNDRY AND IT&#39;S SETUP</title><content type='html'>&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;EdgeX Foundry:-&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;All the different types of IoT devices speak different languages and follow different protocols like BACnet, OPC-UA, MQTT, and REST. EdgeX foundry brings data from all different sources to a single platform and makes it available for the cloud. It a software solution that takes all that data in and normalized into a single format for the cloud and it&#39;s also able to control things.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNlP9A9LZk7RCxivYTQZI6YdOH9TjgIHkWAqJbIRzEaoORfuXbUiloPf7BvRyt2aj5WkvZXzz_zbcOE75bq-2q72qg8TKPNye1i8T-1Ft4Bn3lvCmuDVXZVFL5kxdwRHt-7uAOmXk9DpY/s1921/edgex.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1101&quot; data-original-width=&quot;1921&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNlP9A9LZk7RCxivYTQZI6YdOH9TjgIHkWAqJbIRzEaoORfuXbUiloPf7BvRyt2aj5WkvZXzz_zbcOE75bq-2q72qg8TKPNye1i8T-1Ft4Bn3lvCmuDVXZVFL5kxdwRHt-7uAOmXk9DpY/s16000/edgex.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;It can also be configured to match individual data formats used by devices from different vendors by using device profiles. EdgeX Foundry is made up of a collection of microservices, each of which runs in a container. That you can see in the above picture. Microservices communicate with each other over REST API interfaces.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;It is able to convert source data from proprietary data formats into XML or JSON, encrypt, compress, and finally forward that data to an external source over MQTT or other protocols.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Installation of EdgeX Foundry would generally be done close to the sensors/data being generated. For example on an edge gateway appliance. There could be thousands of these, each with its own EdgeX installation, ingesting, converting, and forwarding data to a central location. While EdgeX runs as a collection of containerized microservices it doesn’t currently support k8s. Note that since the overhead for k8s can be prohibitive for low-powered edge nodes, lack of k8s support isn’t necessarily a concern.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Below we are going to discuss the installation setup of EdgeX foundry on Ubuntu 20.04 (VM).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Step 1: Installing Docker and docker-compose&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;If you are not aware of docker, you can read from here.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://linuxbaya.blogspot.com/2020/07/what-is-docker.html&quot; style=&quot;background-color: white; font-family: Oswald; font-size: x-large; text-align: left;&quot; target=&quot;_blank&quot;&gt;WHAT IS DOCKER AND HOW IT WORKS?&lt;/a&gt;&lt;span style=&quot;background-color: white; font-family: Oswald; font-size: x-large; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Follow the process to install docker-engine.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Run these command to update the system&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo apt update&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo apt upgrade -y&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Now install the Docker-CE by verifying the certificate&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo apt install apt-transport-https ca-certificates curl software-properties-common -y&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Note: Match “ focal ” below with your distribution if different from 20.04 (check with “lsb_release -a” if unsure about the version):&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo add-apt-repository &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo apt update&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo apt install docker-ce -y&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Now give permission to the current user to run docker binary and after that, log out and back in again to get the effect of new permissions.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo usermod -aG docker ${USER}&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Now install docker-compose with the below command.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo apt install docker-compose -y&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Step 2: Running EdgeX Foundry&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;We are going to run EdgeX using a docker-composer that manages the containers in the YAML file as a group. basically, it specifies how each microservice should run, its ports, volumes, and all dependencies.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;First, create a directory for the EdgeX Foundry docker-compose.yml file.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ mkdir edgex&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ cd edgex&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Download the docker-compose.yml file from the link&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ wget https://raw.githubusercontent.com/edgexfoundry/developer-scripts/master/releases/geneva/compose-files/docker-compose-geneva-redis.yml&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ cp&amp;nbsp;&lt;span style=&quot;text-align: left;&quot;&gt;docker-compose-geneva-redis.yml&lt;/span&gt;&amp;nbsp;docker-compose.yml&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Pull the containers and list the newly downloaded images&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ docker-compose pull&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ docker image ls&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXH-P6FTudBg7jqMR0neV7JOC1ZbgwhfE4eKIUN2R6Ithyphenhyphen1J4f3-1g2-S1zdBTN7RNNsyFtYOyfp2Jd_JHonBV_7e-sSzrSEYrx5zFh1R8l2OLqk2RrG23aKbpKHYTDXw0TOsAaslZxE4/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;EdgeX services&quot; data-original-height=&quot;321&quot; data-original-width=&quot;595&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXH-P6FTudBg7jqMR0neV7JOC1ZbgwhfE4eKIUN2R6Ithyphenhyphen1J4f3-1g2-S1zdBTN7RNNsyFtYOyfp2Jd_JHonBV_7e-sSzrSEYrx5zFh1R8l2OLqk2RrG23aKbpKHYTDXw0TOsAaslZxE4/s16000/image.png&quot; title=&quot;EdgeX services&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Start EdgeX Foundry using docker-compose&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ docker-compose up -d&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;List the running containers&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ docker-compose ps&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Note that the ports used by EdgeX are listed for each container. These ports are defined in the docker-compose.yml file along with many other settings.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Step 3: Accessing EdgeX Foundry&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;We can interact with edgex either from the command line (using cURL, postman, etc..) or from the web browser(chrome, firefox, etc..).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;To list out the registered device in edgex foundry we can run the curl command on the CLI.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;span style=&quot;background-color: #cccccc;&quot;&gt;$ curl http://&amp;lt;edgex ip&amp;gt;:48082/api/v1/device&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Or to get a structured output run:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ sudo apt install jq&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ curl http://&amp;lt;edgex ip&amp;gt;:48082/api/v1/device | jq&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIrRQ1h0JyXnZLtVONeVoo7QrEGGr00spgTJ0VuEZtPZvPz05tw4GbBLwg4e9MMz3ON9w5ZDzfblS62FxNV9XFW5OY1wi_tdu-PfS8q5oxouSocaQCBGqiwa44oRxC5pq16tyLoy-6hzY/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;edgex data&quot; data-original-height=&quot;380&quot; data-original-width=&quot;723&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIrRQ1h0JyXnZLtVONeVoo7QrEGGr00spgTJ0VuEZtPZvPz05tw4GbBLwg4e9MMz3ON9w5ZDzfblS62FxNV9XFW5OY1wi_tdu-PfS8q5oxouSocaQCBGqiwa44oRxC5pq16tyLoy-6hzY/s16000/image.png&quot; title=&quot;edgex data&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Similarly, we can make a POST method to send the sensor data and the GET method to get the data from EdgeX using any REST API libs like cURL or postman.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Note: The command “docker-compose ps” is helpful to find out the port number to get interact with that service.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;We can also interact with EdgeX through UI. There are many UI available for EdgeX Foundry but we are using its own golang UI for this example.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;a. Open the docker-compose.yml file in an editor&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;b. Add an entry for the golang ui under the “services” section as per the below:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;ui:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;container_name: edgex-ui-go&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;hostname: edgex-ui-go&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;image:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;nexus3.edgexfoundry.org:10004/docker-edgex-ui-go:master&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;networks:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;edgex-network: null&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;ports:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;- &quot;0.0.0.0:4000:4000/tcp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;read_only: true&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJDX0cW_PMrVLJbQWBeQkhwmJft_Nbv8hBCojW4_2bCD0UGSNnBlfa4R_Vo6G8IgmMYqf2nMcNs15eXEsrNBczBtu_k1IX8tYiOrJVMCbxNG8cDc5H6295-5I9Kv3U7r8Rsa0-AP6P1Z4/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;edgex-ui-go&quot; data-original-height=&quot;221&quot; data-original-width=&quot;534&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJDX0cW_PMrVLJbQWBeQkhwmJft_Nbv8hBCojW4_2bCD0UGSNnBlfa4R_Vo6G8IgmMYqf2nMcNs15eXEsrNBczBtu_k1IX8tYiOrJVMCbxNG8cDc5H6295-5I9Kv3U7r8Rsa0-AP6P1Z4/s16000/image.png&quot; title=&quot;edgex-ui-go&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Note: compare the entries above and match the indentation.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;c. Save and exit the editor&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;d. Start EdgeX Foundry&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ docker-compose up -d&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;e. The EdgeX UI can now be accessed in a browser at:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;http://&amp;lt;edgex ip&amp;gt;:4000&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV4nY6Jd314APFbLdLJZW8EOYh24wBusps4h2Po55HQUAwHtFp9gzmEGujpDsQ8OdbfR5lGd1I_vLBCpar3RXTqqXBKklOgC32gFYXSpS4jR_d28sZZiy-eS_xLMhMRvc7ECQYfkCIJqQ/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;EdgeX console&quot; data-original-height=&quot;679&quot; data-original-width=&quot;1350&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV4nY6Jd314APFbLdLJZW8EOYh24wBusps4h2Po55HQUAwHtFp9gzmEGujpDsQ8OdbfR5lGd1I_vLBCpar3RXTqqXBKklOgC32gFYXSpS4jR_d28sZZiy-eS_xLMhMRvc7ECQYfkCIJqQ/s16000/image.png&quot; title=&quot;EdgeX console&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Note: If asked, use “admin” / “admin” for username / password.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Step 4: Stopping EdgeX Foundry&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;The commands in this section need to be issued from the folder containing the docker-compose.yml file (“edgex” in this example).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;To just stop the containers:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ docker-compose stop&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;To stop and remove the containers:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ docker-compose down&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;To stop and remove containers + volumes (the original images will remain):&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: #cccccc; font-family: georgia; font-size: large;&quot;&gt;$ docker-compose down -v&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;Here is the video demonstration:-&lt;/span&gt;&lt;/p&gt;

&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;384&quot; src=&quot;https://www.youtube.com/embed/ZI15Bu9pG54&quot; width=&quot;683&quot;&gt;&lt;/iframe&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;In the next post, we will see how to send the sensor data to any server or cloud using the EdgeX foundry.&lt;/span&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/3267858874775604674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/3267858874775604674'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/09/edgex-foundry-and-its-setup.html' title='EDGEX FOUNDRY AND IT&#39;S SETUP'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNlP9A9LZk7RCxivYTQZI6YdOH9TjgIHkWAqJbIRzEaoORfuXbUiloPf7BvRyt2aj5WkvZXzz_zbcOE75bq-2q72qg8TKPNye1i8T-1Ft4Bn3lvCmuDVXZVFL5kxdwRHt-7uAOmXk9DpY/s72-c/edgex.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-6342129854583021703</id><published>2020-09-17T21:50:00.000-07:00</published><updated>2020-09-17T22:50:08.272-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Embedded System"/><title type='text'>CROSS-PLATFORM DEVELOPMENT TOOLCHAIN</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Cross-compilation&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;In a Linux system, if we write a simple &quot;Hello world&quot; program in c/c++ programming language, and compile it using gcc/g++ compiler, it will generate an executable binary file that can only be executed in Linux platform. We can&#39;t run that binary on the Windows platform. To make a Windows executable binary on the Linux system we need a different compiler. One thing to be noticed here is the host machine where we run the compiler (Linux) and the target machine for which we make the compilation (Windows) both are different platforms. And this is called cross-platform-compilation or cross-compilation.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYPf2zZIjrZSq2A2chzuor6RSQ-ML35nQSPLmOd-r_rcqQkWiw4TWH8MrLwcnsPWChZG5sAeKoZWMsbtCm35cXPJgy6nGXqiQ12FgfvQfUj-196fdGKZAnN2zWf-lRGwpw6r4feuKk7_Q/s1600/Cross+compiler.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;590&quot; data-original-width=&quot;1050&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYPf2zZIjrZSq2A2chzuor6RSQ-ML35nQSPLmOd-r_rcqQkWiw4TWH8MrLwcnsPWChZG5sAeKoZWMsbtCm35cXPJgy6nGXqiQ12FgfvQfUj-196fdGKZAnN2zWf-lRGwpw6r4feuKk7_Q/s1600/Cross+compiler.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is typically used in the Embedded development systems. They required this cross-compiler in a faster platform like Linux or PowerPC to build the source code for a slower platform like ARM/AVR.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Toolchain&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;To make a cross-compiler we need a set of development tools that are linked together by specific stages called toolchain.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;A lot of prebuilt cross-platform toolchains are available. You may choose to use such packages instead of carrying out the procedure explained here. I suggest you read the book &#39;Building Embedded Linux Systems&#39; 2nd edition to know the detailed procedure.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;You can download the components of the GNU toolchain from the FSF&#39;s FTP site at ftp://ftp.gnu.org/gnu/ or any of its mirrors. The binutils package is in the binutils directory, the gcc package is in the gcc directory, and the glibc package is in the glibc directory.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;With the appropriate tools in place, let us take a look at the procedure used to build the toolchain. These&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;are the five main steps:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;1. Kernel headers setup&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;2. Binary utility setup&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;3. Bootstrap compiler setup&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;4. C library setup&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;5. Full compiler setup&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Before developing the toolchain we need to create new directories and set some environmental variables to make our configuration easy. Since we were logged in as non-root user, we should create new directories under the user folder to avoid any kind of permission error.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The below command will create all directories required for this toolchain development.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ mkdir toolchain toolchain/tools toolchain/kernel toolchain/build-tools toolchain/build-tools/build-binutils toolchain/build-tools/build-boot-gcc toolchain/build-tools/build-glibc toolchain/build-tools/build-gcc&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcylb1G95y9cm7mPxbvvSv2zXtHCNXhSA-xLYlUHw80ga6LxH1rmhzWwIas7GdmCa4LDlVg7YEA-ek8cqbTHWv9QpjruZX0JAu5Rwgp_A68ExQBTI2nI_SlD1_URQWKx1LpmmERZt_maE/s1600/toolchain+tree.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;195&quot; data-original-width=&quot;557&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcylb1G95y9cm7mPxbvvSv2zXtHCNXhSA-xLYlUHw80ga6LxH1rmhzWwIas7GdmCa4LDlVg7YEA-ek8cqbTHWv9QpjruZX0JAu5Rwgp_A68ExQBTI2nI_SlD1_URQWKx1LpmmERZt_maE/s1600/toolchain+tree.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Put below lines inside a script and source the script to set the environment variables.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;export PROJECT=toolchain&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;export PRJROOT=/home/linuxbaya/demo-module/${PROJECT}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;export TARGET=arm-linux&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;export PREFIX=${PRJROOT}/tools&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;export TARGET_PREFIX=${PREFIX}/${TARGET}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;export PATH=${PREFIX}/bin:${PATH}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;cd $PRJROOT&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The TARGET variable defines the type of target for which your toolchain will be built. For&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;PowerPC it would be powerpc-linux, for ARM it would be arm-linux, for SuperH4 it would be sh4-linux. The PREFIX variable provides the component configuration scripts with a pointer to the directory where&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;we would like the target utilities to be installed. Conversely, TARGET_PREFIX is used for the installation of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;target-dependent header files and libraries.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Now move to the build-tool directory and download four packages binutils, gcc, and glibc from the FSF&#39;s FTP site at ftp://ftp.gnu.org/gnu/ or any of its mirrors. Everything is now almost ready for building the actual toolchain.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;1. Kernel Headers Setup&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;As I said earlier, the setup of the kernel headers is the first step in building the toolchain. Select&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&amp;nbsp;a kernel from the main kernel repository at http://www.kernel.org/ or any other mirror site, the first thing you need to do is download a copy of that kernel into the directory ${PRJROOT}/kernel.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ tar xvzf linux-5.8.9.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd linux-5.8.9&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ make ARCH=arm INSTALL_HDR_PATH=headers/ headers_install&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;This will display a menu in your console where you will be able to select your kernel&#39;s configuration.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Simply save and exit will create a .config file in your current working directory.&amp;nbsp; We can now create the include directory required for the toolchain and copy the kernel headers to it:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cp -r headers/include/asm /usr/include&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cp -r include/linux/ /usr/include&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cp -r include/asm-generic/ /usr/include&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Kernel headers are required; usually during the compilation of glibc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;2. Binutils Setup&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The binutils package includes the utilities most often used to manipulate binary object files. The two most important utilities within the package are the GNU assembler, as, and the linker, ld, and others are gasp, ar, nm, objcopy, objdump, ranlib, readelf, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The first step in setting up the binutils package is to extract its source code from the archive we&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;downloaded earlier:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd ${PRJROOT}/build-tools&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ tar xvzf binutils-2.10.1.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd build-binutils&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ ../binutils-2.10.1/configure --target=$TARGET --prefix=${PREFIX}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;With the Makefiles now ready, we can build the actual utilities:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ make&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;With the package now built, we can install the binutils:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ make install&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The binutils have now been installed inside the directory pointed to by PREFIX. You can check to see that&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ ls ${PREFIX}/bin&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;3. Bootstrap Compiler Setup&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Again, we start by extracting the gcc package from the archive we downloaded earlier:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd ${PRJROOT}/build-tools&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ tar xvzf gcc-9.2.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This will create a directory called gcc-9.2.0 with the package&#39;s content. Move to the directory and download the prerequisites.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;$ cd&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;gcc-9.2.0&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ ./contrib/download_prerequisites&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;We can now proceed to the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;configuration of the build in the directory we had prepared for the bootstrap compiler:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd ../build-boot-gcc&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ ../gcc-9.2.0/configure --target=$TARGET --prefix=${PREFIX} \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;gt; --without-headers --with-newlib --enable-languages=c&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;With the Makefiles ready, we can now build the compiler:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ make all-gcc&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ make install-gcc&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The bootstrap compiler is now installed alongside the binutils, and you can see it by relisting the content&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;of ${PREFIX}/bin. The name of the compiler&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&amp;nbsp;is called arm-linux-gcc in our example.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;4. C Library Setup&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;In our cross-platform development toolchain,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;This package&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;is the most delicate and lengthy package build. It&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&amp;nbsp;is made up of many libraries.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;As with the previous packages, we start by extracting the C library from the archive we downloaded&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;earlier:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd ${PRJROOT}/build-tools&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ tar xvzf glibc-2.32.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;This will create a directory called glibc-2.32 with the package&#39;s content.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;We can now proceed to preparing the build of the C library in the build-glibc directory:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd build-glibc&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ CC=arm-linux-gcc ../glibc-2.32/configure --host=$TARGET \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;gt; --prefix=&quot;/usr&quot; --enable-add-ons \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;gt; --with-headers=${TARGET_PREFIX}/include&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Along with the other components of the C library, the link script has been installed in the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;${TARGET_PREFIX}/lib directory.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;In its original form, libc.so looks like this:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;/* GNU ld script&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Use the shared library, but some functions are only in&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;the static library, so try that secondarily. */&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a )&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Modify it to:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;/* GNU ld script&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Use the shared library, but some functions are only in&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;the static library, so try that secondarily. */&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;GROUP ( libc.so.6 libc_nonshared.a )&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Before modify, I suggest you to make a copy of it.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd ${TARGET_PREFIX}/lib&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cp ./libc.so ./libc.so.orig&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;By modifying it now we are forcing the linker to use the libraries found&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;within the same directory as the libc.so script, instead of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;the native ones found on your host.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;5. Full Compiler Setup&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;We are now ready to install the full compiler for your target with both C and C++ support.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ cd ${PRJROOT}/build-tools/build-gcc&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ ../gcc-9.2.0/configure --target=$TARGET --prefix=${PREFIX} \&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;gt; --enable-languages=c,c++&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The options we use here have the same meaning as when building the bootstrap compiler. Notice&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&amp;nbsp;that there are fewer options and that we now add support for C++ in addition to C.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;With the full compiler properly configured, we can now build it:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ make all&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Notice that we didn&#39;t use all-gcc as with the bootstrap compiler, but rather all. This&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;will result in the build of all the rest of the components included with the gcc package, including the C++&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;runtime libraries.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;If you didn&#39;t properly configure the libc.so link script file as previously explained, the build will fail&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;during the compilation of the runtime libraries.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;With the full compiler now built, we can install it:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;$ make install&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This will install the full compiler over the bootstrap compiler we had previously installed.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Using the Toolchain&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;You now have a fully functional cross-development toolchain, which you can use very much as you&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;would a native GNU toolchain, save for the additional target name prepended to every command you are&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;used to. Instead of invoking gcc and objdump for your target, you will need to invoke arm-linux-gcc and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;arm-linux-objdump.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The following is a Makefile for the control daemon on a test module that provides a good example of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;the cross-development toolchain&#39;s use:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiZu9d1Pk7ynI2NM5zrjKzcpXpJDH4CvfmvJvbu6T0rLazajLkEfYgOF4nIahtA9bq5Jd6tdTeAdDfgb0vxX8cJbRMEk8-y_svfof-ROX5_hLYCR3fnmrXNKk9frCYes0nTQoXwO7AqxY/s1600/makefile1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;420&quot; data-original-width=&quot;783&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiZu9d1Pk7ynI2NM5zrjKzcpXpJDH4CvfmvJvbu6T0rLazajLkEfYgOF4nIahtA9bq5Jd6tdTeAdDfgb0vxX8cJbRMEk8-y_svfof-ROX5_hLYCR3fnmrXNKk9frCYes0nTQoXwO7AqxY/s1600/makefile1.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPXygYjtR0m7QcPUPMUJTSj8fLfIBCbETE320ltioZNpdO0TrdToWw97gi4pA8WDuRtO0j3hLfIpq2d3pDOkYDT2ACaET7gdE8UhMTDwKdD4yD2k4WMlVYLqZJ5y9PqReIc2aYXAzCSd8/s1600/Makefile2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;405&quot; data-original-width=&quot;792&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPXygYjtR0m7QcPUPMUJTSj8fLfIBCbETE320ltioZNpdO0TrdToWw97gi4pA8WDuRtO0j3hLfIpq2d3pDOkYDT2ACaET7gdE8UhMTDwKdD4yD2k4WMlVYLqZJ5y9PqReIc2aYXAzCSd8/s1600/Makefile2.PNG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: georgia, times new roman, serif; font-size: large;&quot;&gt;The first part of the Makefile specifies the names of the toolchain utilities we are using to build the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif; font-size: large;&quot;&gt;program. The second part of the Makefile defines the build settings. CFLAGS provides the flags to be used during the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;build of any C file. If you wish to link your application statically, you need to add the -static option to LDFLAGS. This&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;generates an executable that does not rely on any shared library. But given that the standard GNU C&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;library is rather large, this will result in a very large binary. A simple program that uses printf( ) to print&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&quot;Hello World!&quot;, for example, is less than 12 KB in size when linked dynamically and around 350 KB&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;when linked statically and stripped.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: georgia, times new roman, serif; font-size: large;&quot;&gt;The make rules themselves are very much the same ones you would find in a standard, native Makefile. I&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif; font-size: large;&quot;&gt;added the install rule to automate the install process.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6342129854583021703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6342129854583021703'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/09/cross-platform-development-toolchain.html' title='CROSS-PLATFORM DEVELOPMENT TOOLCHAIN'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYPf2zZIjrZSq2A2chzuor6RSQ-ML35nQSPLmOd-r_rcqQkWiw4TWH8MrLwcnsPWChZG5sAeKoZWMsbtCm35cXPJgy6nGXqiQ12FgfvQfUj-196fdGKZAnN2zWf-lRGwpw6r4feuKk7_Q/s72-c/Cross+compiler.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-6869825662164152000</id><published>2020-09-03T23:35:00.002-07:00</published><updated>2021-05-21T02:29:05.181-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Protocols"/><title type='text'>WHAT IS VoIP AND SIP?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;VoIP (Voice Over Internet Protocol) is a term that used to any end-to-end call over the internet service instead of any cellular network or the traditional telephonic line. Using VoIP we can make any kind of calls (audio, video) without any prepaid or postpaid recharges. It requires internet connectivity. We just have to make sure that our application is connected to the internet for which the voice or video data packets generated from one end could be transmitted to the other end through the internet. That is what Skype, WhatsApp, like applications, and many companies (for its internal communication between employees) do nowadays.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoxNL_RPs-iVbnH7O-YCDMbvgOPwayNGjDDYbnCljIddzKNN7NzvCdSABrhxAbeQfU8k0IOV1kq9ZybfAjC_6XINIJ2EA2BKH1gF1NWvnSMyRLMGMfsqo3Qb8Et-dc907bmpOkei29hJU/s1600/sip_server+%25281%2529.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img alt=&quot;VoIP and SIP protocol&quot; border=&quot;0&quot; data-original-height=&quot;974&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoxNL_RPs-iVbnH7O-YCDMbvgOPwayNGjDDYbnCljIddzKNN7NzvCdSABrhxAbeQfU8k0IOV1kq9ZybfAjC_6XINIJ2EA2BKH1gF1NWvnSMyRLMGMfsqo3Qb8Et-dc907bmpOkei29hJU/s1600/sip_server+%25281%2529.png&quot; title=&quot;VoIP and SIP protocol&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is possible because of the application layer protocol &quot;SIP&quot;. It is a signaling protocol that allows two clients to establish a media session with each other. It mostly uses UDP protocol to transfer packets, although it can use both TCP and UDP protocol for packet transfer.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;SIP stands for Session Initiation Protocol which is used to initiate, modify, and terminating sessions (maybe text, voice, video, or a combination of these) with one or more participants in an IP network. Basically, it&#39;s of two entities, one is the client, and the other is the server.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;1. &lt;b&gt;SIP Client:-&lt;/b&gt; Clients are the entities who make requests.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;2. &lt;b&gt;SIP Server:-&lt;/b&gt; Server is the entity that accepts the client request and sends a response to the respective request.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;There are some individual servers present inside the SIP server like- Proxy server, Registrar, Redirect Server, Location server.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Proxy Server:-&lt;/b&gt; When a client generates a &lt;b&gt;SIP request message&lt;/b&gt;, it goes to the proxy server. Then the proxy server forwards the request to another proxy server or to the recipient. And a SIP request message could be:-&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;1. INVITE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;---&amp;gt; Request a session&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;2. ACK&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;---&amp;gt; Final response to the INVITE&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;3. OPTIONS&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ---&amp;gt; Ask for server capability (In order to support voice, video text)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;4. CANCEL&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ---&amp;gt; Cancel a pending request&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;5. BYE&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ---&amp;gt; Terminate a session&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;6. REGISTER&amp;nbsp; &amp;nbsp; &amp;nbsp;---&amp;gt; Send user address to the server&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;7. NOTIFY&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;---&amp;gt; To send event notice&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Registrar:-&lt;/b&gt; It used to register any new client into the SIP server.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Redirect Server:-&lt;/b&gt; It redirects back the client request in case the recipient is missing from the location server.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Location Server:-&lt;/b&gt; The addresses registered to the registrar are stored in the location server.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The workflow of SIP:-&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Here is an example of two SIP clients communicate with each other through the SIP server given below. Here both clients are already registered with the server and client 1 is trying to initiate the voice call with client 2.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPznbKJckLCV9Am78p62jREKbKOFb5CmkF2KwmI4UonrbvmA9V3vp465Vv-REsaoPRsqJLp4mnPbcPjrWjBOr-R79cUzy9bdego1n-SK7NCo2T547h8YbjOcV5IBXy3rZZFHYoj255ZtQ/s1600/sip_flow.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img alt=&quot;sip flow&quot; border=&quot;0&quot; data-original-height=&quot;962&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPznbKJckLCV9Am78p62jREKbKOFb5CmkF2KwmI4UonrbvmA9V3vp465Vv-REsaoPRsqJLp4mnPbcPjrWjBOr-R79cUzy9bdego1n-SK7NCo2T547h8YbjOcV5IBXy3rZZFHYoj255ZtQ/s1600/sip_flow.png&quot; title=&quot;sip flow&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;When client 1 tries to initiate a conversation session by sending an &quot;INVITE&quot; request to client 2, then the request goes to the proxy server. The proxy server tries to check the registered address of client 2 from the location server if it failed to get the client 2 address it simply redirects back the request otherwise it sends a 100 Trying response to client 1 and then sends the &quot;INVITE&quot; request to client 2 and waiting for the client 2 response. When the server gets the &quot;180 ringings&quot; response from client 2, it sends the same response to client 1. When client 2 receives the call, the server gets a &quot;200 OK&quot; response from client 2 and acknowledges it. Then the client 1 gets the &quot;200 OK&quot; response from the server followed by an acknowledgment and starts their conversation.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Here is a picture of the server logs of a video call session made from client id 4002 to client id 4000.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCxQP5cxb4FEeJ-mWM6wmnrkoPjEoZVCjjegx9g-LVDMWAPj_RiYC-Un7l18s1QmUh_2dwez80PgKjOiBZIrfyLEoKsPeTb9ztHMPVE-XzmrGAFr6tKxKkXSdawHkDRDUgiPYuTfgNQJc/s1600/Call_log.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img alt=&quot;sip logs&quot; border=&quot;0&quot; data-original-height=&quot;282&quot; data-original-width=&quot;839&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCxQP5cxb4FEeJ-mWM6wmnrkoPjEoZVCjjegx9g-LVDMWAPj_RiYC-Un7l18s1QmUh_2dwez80PgKjOiBZIrfyLEoKsPeTb9ztHMPVE-XzmrGAFr6tKxKkXSdawHkDRDUgiPYuTfgNQJc/s1600/Call_log.PNG&quot; title=&quot;sip logs&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;After the completion of the conversation, client 1 tries to end the call by sending a &quot;BYE&quot; request that is answered by &quot;200 OK&quot; from the server and the server sends a &quot;BYE&quot; request message to client 2 and the session is closed.&amp;nbsp; The last two lines of the above picture show that both clients have left the conversation. Now close the session.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Watch this VoIP video demo to clarify more:-&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;384&quot; src=&quot;https://www.youtube.com/embed/rdMR2gLa4pg&quot; width=&quot;683&quot;&gt;&lt;/iframe&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;

&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Here I am using the open-source software for both server and client i.e Asterisk and LinPhone respectively and trying to show the sip server logs of a video call session.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6869825662164152000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6869825662164152000'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/09/what-is-voip-and-sip.html' title='WHAT IS VoIP AND SIP?'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoxNL_RPs-iVbnH7O-YCDMbvgOPwayNGjDDYbnCljIddzKNN7NzvCdSABrhxAbeQfU8k0IOV1kq9ZybfAjC_6XINIJ2EA2BKH1gF1NWvnSMyRLMGMfsqo3Qb8Et-dc907bmpOkei29hJU/s72-c/sip_server+%25281%2529.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-430418826317068745</id><published>2020-08-02T16:32:00.000-07:00</published><updated>2020-09-04T23:02:58.547-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>SYSTEM CALLS IN LINUX</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;What is the System Call?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Before we know what is it, we should know why it is. In that way, we can get more involved in any topic.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;As we know the &lt;a href=&quot;https://linuxbaya.blogspot.com/2019/03/what-do-you-mean-by-operating-system.html&quot; target=&quot;_blank&quot;&gt;Operating System(OS) is the interface between hardware and user-level applications&lt;/a&gt; and the OS controls all the hardware resources&amp;nbsp;(like hard disk, display, keyboard, etc.). When a user-level application let&#39;s say VLC media player wants to use the &#39;display&#39; resource to project/show a video on the screen. then it makes a request to the operating system for the &#39;display&#39; resource. After that, the operating system reserves that particular resource for the VLC media player for the requested time period. Then only the VLC can use the screen to display contents. This request to acquire resources is called a system call. So in order to use any resources managed by the operating system, we need a system call.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;How the system call works:-&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;System calls are like function calls (Not exactly the same). There is a separate piece of code written to access the system hardware through the device driver, which suppose to be accessed by kernel only (Device drivers are another piece of software without which hardware can&#39;t interact with OS). The declarations and definitions of these functions are present in the POSIX library. That&#39;s why we include the header file from the library to our code in order to use any system calls. For e.g, we include &quot;sys/types.h&quot; header file to use &quot;fork&quot; system call to create a child process and likewise.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: justify; text-decoration-color: initial; text-decoration-style: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqn1EFXsNXURzPM745eAQloeL0Q4ydu4sNhIeSU9eQRFrEDboojSzfrCH9f-ss6hX42YRqKgzXphm_QNEWnlmrG2-xYoUpl57s5Ve6WngkFXUr6geGlw2advla84cYDGQGTDhsCWsN2_c/s1600/system+call+%25281%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img alt=&quot;how system call works&quot; border=&quot;0&quot; data-original-height=&quot;883&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqn1EFXsNXURzPM745eAQloeL0Q4ydu4sNhIeSU9eQRFrEDboojSzfrCH9f-ss6hX42YRqKgzXphm_QNEWnlmrG2-xYoUpl57s5Ve6WngkFXUr6geGlw2advla84cYDGQGTDhsCWsN2_c/s1600/system+call+%25281%2529.png&quot; title=&quot;system call&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The starting address of all functions is saved in a table with there respective &lt;a href=&quot;https://linuxbaya.blogspot.com/2019/06/what-is-api-and-rest-api-here-you-can.html&quot; target=&quot;_blank&quot;&gt;APIs&lt;/a&gt;. Whenever we call a system function, it looks for its API address from the table and jumps to that address to perform the operation. After successful execution, the control returns back to the caller function. This complete process is called a system call. Because we use the system code to make a kernel-level task complete through an API call.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn3_rvQ1FH0pgE3b-82-0gUL_JGCeJhyphenhyphenpirEEdLMZiE5ejhCTjk0n4aNv_tB4ma2Jqwui-DUYBij4MhpB_k6EFiO7SN5PiZZAhOYTgFjvmX71KrL2NOeuW8FNV1BSyODUdhudBb2U4bo8/s1600/system+call+%25282%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img alt=&quot;How system call works&quot; border=&quot;0&quot; data-original-height=&quot;1054&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn3_rvQ1FH0pgE3b-82-0gUL_JGCeJhyphenhyphenpirEEdLMZiE5ejhCTjk0n4aNv_tB4ma2Jqwui-DUYBij4MhpB_k6EFiO7SN5PiZZAhOYTgFjvmX71KrL2NOeuW8FNV1BSyODUdhudBb2U4bo8/s1600/system+call+%25282%2529.png&quot; title=&quot;system calls&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;System calls are basically written in High-Level languages like C/C++. There are different system calls made for different Operating Systems, like:-&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;1. POSIX API for POSIX based system (Unix, Linux, macOS).&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;2. Win32 API for Windows.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;3. Java API for Java Virtual Machine (JVM)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Below are some examples of system calls written with respect to their tasks for POSIX Operating System. you can get all Linux system calls from &lt;a href=&quot;https://thevivekpandey.github.io/posts/2017-09-25-linux-system-calls.html&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;1. Process control:-&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;a) Create and terminate the process.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;b) Get and set process attributes.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;c) Load and execute.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;d) Wait for time.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;e) Wait and signal event.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;f) End and abort.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;g) Allocate and free memory.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;2. File manipulation:-&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;a) Open and close file&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;b) Create and delete a file&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;c) Read and write&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;d) Get and set file attributes&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;3. Device manipulation:-&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;a) Request and release device&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;b) Logically attach and detach a device&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;c) Read, write and reposition&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;d) Get and set device attributes&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;4. Information maintenance:-&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;a) Get and set time&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;b) Get and set date&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;c) Get and set system data&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;5. Communication:-&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;a) Create and delete a communication connection&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;b) Transfer status information&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;c) Attach and detach a remote device&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;d) Send and receive messages&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large; white-space: pre;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Actually, we can create our own system call. There are several &lt;a href=&quot;https://medium.com/anubhav-shrimal/adding-a-hello-world-system-call-to-linux-kernel-dad32875872&quot; target=&quot;_blank&quot;&gt;blogs&lt;/a&gt; written on how to create a system call and compile it with the Linux kernel source code. Here is a video on the practical demo of system call creation.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The video will be coming soon.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/430418826317068745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/430418826317068745'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/08/system-calls-in-linux.html' title='SYSTEM CALLS IN LINUX'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqn1EFXsNXURzPM745eAQloeL0Q4ydu4sNhIeSU9eQRFrEDboojSzfrCH9f-ss6hX42YRqKgzXphm_QNEWnlmrG2-xYoUpl57s5Ve6WngkFXUr6geGlw2advla84cYDGQGTDhsCWsN2_c/s72-c/system+call+%25281%2529.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-1888250807575718346</id><published>2020-07-12T04:06:00.003-07:00</published><updated>2020-10-19T07:27:53.182-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Application"/><title type='text'>WHAT IS DOCKER AND HOW IT WORKS?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;To understand the docker concept better, we need some prior knowledge of the virtualization concept. Read&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; text-align: left;&quot;&gt;&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/05/what-is-virtualization-clearly-explained.html&quot; target=&quot;_blank&quot;&gt;WHAT IS VIRTUALIZATION..?&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Even this post will try to explain both the concepts.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmWsyu-jt-jNNvDJrE3c4rP58kOXyrI_4zCiMckbULv0NejDg1Z_a94ceY_EtXpzYdQ-qSUdS0PG9iDu7ifh3ayO_zYo2WMMnima3hdqULieXnIxD3l_ttvuHwqtPxxbCEK84Tk1c3K1s/s1600/Docker_D.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmWsyu-jt-jNNvDJrE3c4rP58kOXyrI_4zCiMckbULv0NejDg1Z_a94ceY_EtXpzYdQ-qSUdS0PG9iDu7ifh3ayO_zYo2WMMnima3hdqULieXnIxD3l_ttvuHwqtPxxbCEK84Tk1c3K1s/s1600/Docker_D.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif;&quot;&gt;Read the story to understand the concept behind docker&lt;/b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Once upon a time, there was a guy named &#39;Baya&#39; who lived somewhere in Germany. One day he thought to run a process/program for his user-level application stuff. So he placed the process in a computer and executed it. Everything went fine. But one day the process got stuck without any reason (God knows) and it crashed. And the whole system went down with that process.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Then he decided to place an inner computer inside the main computer (Virtualization) to execute the process. If anything goes wrong with the process then it won&#39;t affect the outer computer. And it worked. The requirement of processes increased over time and he created multiple inner computers inside that system and placed multiple processes to run. Resources were getting low with increasing inner computers. At a point of time, the outer system went down because of insufficient resources. And everything got stuck.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWI19K6rpPoidGXUeSj7zk5bQc33o-fVfsu8d3SXfxt1wH7lMQni_P6sLPhc_du1L0YzW798z0OQs0NX1kCUaXi_IwGqMUu4IEWrMz99jOROb2DUPXLXmGc3S_D4h8m9KDKiotWNfOJbA/s1600/docker+Vs.+Virtual.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img alt=&quot;virtualization vs docker&quot; border=&quot;0&quot; data-original-height=&quot;566&quot; data-original-width=&quot;1512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWI19K6rpPoidGXUeSj7zk5bQc33o-fVfsu8d3SXfxt1wH7lMQni_P6sLPhc_du1L0YzW798z0OQs0NX1kCUaXi_IwGqMUu4IEWrMz99jOROb2DUPXLXmGc3S_D4h8m9KDKiotWNfOJbA/s1600/docker+Vs.+Virtual.png&quot; title=&quot;vm vs. docker&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Virtualization Vs. Containerization&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;And here the Linux namespace plays a great role to overcome this situation. The namespace is a feature of Linux kernel which partitions kernel resources such that each set of processes can see a different set of resources. There is no need to create an inner system to virtualize the outer system resources. There are few namespaces:-&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Mount(mnt):-&lt;/b&gt; It isolates file access to a given directory. The process running in this namespace can see the files that are allowed to see.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Process Id(PID):-&lt;/b&gt; It limits the other process that can be seen by the running process.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Network(net):-&lt;/b&gt; It limits the network interfaces for the running process.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Inter-Process-Communication(IPC):-&lt;/b&gt; It prevents processes to establish a range of shared memory between multiple processes.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;UNIX Timesharing System(UTS):-&lt;/b&gt; It isolates the hostname and domain. It allows a single system to appear to have different hostname and domain to different processes.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;User Id(UID):-&lt;/b&gt; It separates the user id from other user ids. Be root in the container but not on the host.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The process which isolates any process running inside it is called&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Container&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;. &lt;b&gt;Docker&lt;/b&gt; is a solution that manages all containers. And finally, Mr. Baya found a solution to his problem.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;How it works?&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Docker works in a similar way that defines a namespace for each process and runs that process under its namespace. If any process got crashed, it dead inside the container which won&#39;t affect other containers and the outside world.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip_b3RvAi4sGUdWw1JXjuHTLJISmSElL_gXswE0kvyMDSBTiIlmsjje0dDJhQpm-I-QnYk5xfyMczCrUIc_r0ByLfW5i3paUtp7ZgWfpcIqZfy9MQ_n6_uvawVNmb64E71UFF7ns_TaJo/s1600/docker+%25281%2529.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;491&quot; data-original-width=&quot;1469&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip_b3RvAi4sGUdWw1JXjuHTLJISmSElL_gXswE0kvyMDSBTiIlmsjje0dDJhQpm-I-QnYk5xfyMczCrUIc_r0ByLfW5i3paUtp7ZgWfpcIqZfy9MQ_n6_uvawVNmb64E71UFF7ns_TaJo/s1600/docker+%25281%2529.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;How to make it work?&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;To run a program inside a container, you need to install the Docker binary from its repository. And that&#39;s it. Now you can run any process/program using docker by this command:-&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;docker run &amp;lt;program name&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;If the program name is not available locally, it searches the program in the docker repository and pulls the image to local, then runs the program.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Watch this video to install docker binary and manage containers&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;iframe width=&quot;683&quot; height=&quot;384&quot; src=&quot;https://www.youtube.com/embed/riT3izuuHPc&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Images:-&lt;/b&gt;&lt;span&gt; Docker creates a file type of the running program is called images. There are lots of images available in the Docker &lt;a href=&quot;https://hub.docker.com/&quot;&gt;repository.&lt;/a&gt; It can be easily transferable to anyone. This is one of the reasons to make the Docker popular.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;&lt;b&gt;Docker file:-&lt;/b&gt; It is used to build a docker image (like Makefile). Suppose you have your own written program (helloworld.py) that you want to run inside a docker container, then you need to make this program file into a docker image which will be possible using docker file.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/1888250807575718346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/1888250807575718346'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/07/what-is-docker.html' title='WHAT IS DOCKER AND HOW IT WORKS?'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmWsyu-jt-jNNvDJrE3c4rP58kOXyrI_4zCiMckbULv0NejDg1Z_a94ceY_EtXpzYdQ-qSUdS0PG9iDu7ifh3ayO_zYo2WMMnima3hdqULieXnIxD3l_ttvuHwqtPxxbCEK84Tk1c3K1s/s72-c/Docker_D.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-2702943149070854439</id><published>2020-07-05T06:21:00.001-07:00</published><updated>2020-08-03T21:15:12.727-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arduino"/><category scheme="http://www.blogger.com/atom/ns#" term="Embedded System"/><title type='text'>WHAT IS ARDUINO AND HOW TO USE IT? CLEARLY EXPLAINED!!!</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Arduino is a piece of electronics board used to create a digital interactive device that can interact with the physical world around like sense and control the outside environment by using an almost unlimited range of input and output devices. we can program the needed interactions required to create some functional device that is performing a specific task.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg94i8LfXyIaRyfz3m1jeugMDWuiR5SAAKlbnKzS2aJ1cAyIDIJuZnIvNVszaI_JNh6y5vAUZ128yd5RC0BC3D0YGxPQy0pP_la_NN1UU06gkeDMWZzDE4gZLPDmrgopuuFsRJNNkGfFwU/s1600/arduino.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;619&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg94i8LfXyIaRyfz3m1jeugMDWuiR5SAAKlbnKzS2aJ1cAyIDIJuZnIvNVszaI_JNh6y5vAUZ128yd5RC0BC3D0YGxPQy0pP_la_NN1UU06gkeDMWZzDE4gZLPDmrgopuuFsRJNNkGfFwU/s1600/arduino.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;We can make our Arduino device a connected system. It can be connected to the internet using wireline like Ethernet, wireless like Wi-Fi, Bluetooth, or whatever. Now if you think about it for a second this is what the internet of things (IoT) is all about. Building smart devices that are acting as connected entities and are sharing real-time information with the internet cloud. By doing these we can turn the Arduino into endless electronics applications&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Looking at the Arduino board, I can say, it is some printed circuit board (PCB). That is specifically designed to use a microcontroller chip as well as all kind of other connectors and components that allows us to attach inputs and outputs data.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic9kxyXnZxnELpA7-SFRN0lqHId0TRMClXUAXxW1oewvIU6mnfD92HFrzeZA5iezTrTkbxSysEJn3R3WrHdcLb0JW1GJ_gn5LZGyljn0KfKmVusYZmAiIN-AZVYSvxCAb18eKTmxvvhl0/s1600/Arduino2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic9kxyXnZxnELpA7-SFRN0lqHId0TRMClXUAXxW1oewvIU6mnfD92HFrzeZA5iezTrTkbxSysEJn3R3WrHdcLb0JW1GJ_gn5LZGyljn0KfKmVusYZmAiIN-AZVYSvxCAb18eKTmxvvhl0/s1600/Arduino2.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Arduino is an open-source hardware platform. That means Anyone can download the design files and create the same product or a new one and this is why we will see that some companies are selling the Arduino official products and other companies are selling “compatible Arduino” products.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;From a developer&#39;s point of view to program the Arduino microcontroller, they provide us a very nice integrated development environment (IDE) for free and we can download from the internet and the code itself is based on a C/C++ programming language.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;1. Arduino Software:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://www.arduino.cc/en/main/software&quot; target=&quot;_blank&quot;&gt;Arduino IDE (Download)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;2. Arduino Hardware:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://amzn.to/2BD6Kk8&quot; target=&quot;_blank&quot;&gt;Arduino Kit (Amazon)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;https://amzn.to/31MHsuw&quot; target=&quot;_blank&quot;&gt;Arduino Uno (Amazon)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Why this Arduino platform is so popular?&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Probably because it is a really affordable low-cost product so people around the world can easily buy and start play and try building all kinds of applications around it.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Also Check:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h1 class=&quot;post-title entry-title&quot; itemprop=&quot;name headline&quot; style=&quot;background-color: white; font-family: Oswald; font-weight: 400; line-height: 44px; margin: 0px; outline: 0px; padding: 0px; position: relative; transition: all 0.3s ease 0s;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/09/make-your-first-project-with-raspberry.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;MAKE YOUR FIRST PROJECT WITH RASPBERRY PI !!!&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2702943149070854439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2702943149070854439'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/07/what-is-arduino-and-how-to-use-arduino.html' title='WHAT IS ARDUINO AND HOW TO USE IT? CLEARLY EXPLAINED!!!'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg94i8LfXyIaRyfz3m1jeugMDWuiR5SAAKlbnKzS2aJ1cAyIDIJuZnIvNVszaI_JNh6y5vAUZ128yd5RC0BC3D0YGxPQy0pP_la_NN1UU06gkeDMWZzDE4gZLPDmrgopuuFsRJNNkGfFwU/s72-c/arduino.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-6047583284826197590</id><published>2020-06-21T07:46:00.003-07:00</published><updated>2020-09-26T02:20:50.054-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>LINUX FILE STRUCTURE</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This post is about the file structure or directory structure of the Linux operating system. The file structure is nothing but how an individual computer organizes its data and store it. Linux file structure is somehow different than the Windows and Macintosh operating systems.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;When you install Windows OS, it directly gives you the C drive, D drive and you keep your data inside it. But you never know where the system files, configuration files, program files, device files, etc are store. Being open-source, Linux operating system keeps everything in a completely different way to show its file structure.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5i5M8360jLP5HK8goqzC_s26qrK3mmD58-KfkUEK053ck3ejI5iyZUjhu22m-BwONMJK4RxIJjGz0wWUo6XUmjIP8kxB6Y4SauY7FpiwoZmVk7kYB06jjxMOX8-dTuCjkUZf4xQG64DA/s1600/linux+file+system.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;634&quot; data-original-width=&quot;1442&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5i5M8360jLP5HK8goqzC_s26qrK3mmD58-KfkUEK053ck3ejI5iyZUjhu22m-BwONMJK4RxIJjGz0wWUo6XUmjIP8kxB6Y4SauY7FpiwoZmVk7kYB06jjxMOX8-dTuCjkUZf4xQG64DA/s1600/linux+file+system.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Linux operating system represents every device like hard drives, keyboard,&amp;nbsp; display, etc., everything as a file or a folder. You just need to mount the device in an empty folder, so that you can access the device.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;The “official” rules of a root filesystem are contained in the Filesystem Hierarchy&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: georgia;&quot;&gt;Standard (FHS) that u can get from &lt;a href=&quot;https://wiki.linuxfoundation.org/lsb/start&quot;&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: georgia; font-size: large;&quot;&gt;we are going to discuss some important files rather than all the directories.&lt;/span&gt;&lt;/div&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;So let&#39;s understand the file system hierarchy of Linux:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/:- &lt;/b&gt;This is the default and only mount point for all file and folder. Inside this, you can get all the system and user data.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/bin/:-&lt;/b&gt; It contains the basic binary files, which a user can use to run as Linux commands. Example:- bash, cat, chmod, cp, date, echo, grep, kill, ls, mkdir, mv, mount, more, ping, pwd, rm, sh, uname, umount, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/boot/:-&lt;/b&gt; It contains the boot loader file i.e grub or grub2.&amp;nbsp; Linux kernel and other files required for the boot process. It is similar to the system reserved partition for Windows OS.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/dev/:-&lt;/b&gt; It contains all the device files for the drive, keyboard, mouse, etc. Here you can find the file for your device. like:- vda, vdb, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/etc/:-&lt;/b&gt; This is an important folder that contains configuration files for the system. Sometimes you want to change some configuration of your network or system, you can found the file here and can change the configuration parameter of the respective file. It contains files like:- fstab, hostname, hosts, init, init.d, networks, passwd, profile, resolve.conf, services, shell, timezone, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/home/:-&lt;/b&gt; user’s personal files like- Documents, Downloads, Music, Video, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/lib/:-&lt;/b&gt; It contains the basic library files used by the system. Like DLL (Dynamic Link Library) in windows.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwryl4E_bmM3raV0rokwhQcoP76Wv5zLpceD0gAjhMf50p0UO1VB_HcBJuhLh9vuo1xIJYTrMAUny2NG18iLy2ZT3Q_zSIOmtX2LEMJBYqB1y90RrdvkQCfDMTi-7YqHQcqP9rbm_6QAY/s1600/linux_file.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;862&quot; data-original-width=&quot;1565&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwryl4E_bmM3raV0rokwhQcoP76Wv5zLpceD0gAjhMf50p0UO1VB_HcBJuhLh9vuo1xIJYTrMAUny2NG18iLy2ZT3Q_zSIOmtX2LEMJBYqB1y90RrdvkQCfDMTi-7YqHQcqP9rbm_6QAY/s1600/linux_file.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;b&gt;/media/:-&lt;/b&gt;Its a default mount point for removable media devices (CD-ROM, USB keys, and so on). If you plug in a USB drive to your Linux system, it will automatically show on your desktop.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/mnt/:-&lt;/b&gt; temporary mount point that can be used by root or user having access to it.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/opt/:-&lt;/b&gt; It contains data of external applications provided by third parties. like Chrome, Skype, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/root/:-&lt;/b&gt; It contains the administrator’s (root’s) personal files.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/proc/:-&lt;/b&gt; All files in this folder contains information about the active/running processes.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/sbin/:-&lt;/b&gt; It contains the system binaries that can only access by root.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/srv/:-&lt;/b&gt; All the service-related data are found here like- the services are started after boot and data used by servers hosted on this system.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/tmp/:-&lt;/b&gt; temporary files to store data (this directory is often cleaned at boot)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/usr/:-&lt;/b&gt; applications (this directory is further subdivided into bin, sbin, lib according to the same logic as in the root directory)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;/var/:-&lt;/b&gt; variable data of any Services. like every service has its own data and configuration. For configuration, the default folder is /etc/ and similarly /var/ is for data.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is the basic file structure and structure information about the Linux operating system that we should know before using it.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6047583284826197590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/6047583284826197590'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/06/linux-file-structure.html' title='LINUX FILE STRUCTURE'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5i5M8360jLP5HK8goqzC_s26qrK3mmD58-KfkUEK053ck3ejI5iyZUjhu22m-BwONMJK4RxIJjGz0wWUo6XUmjIP8kxB6Y4SauY7FpiwoZmVk7kYB06jjxMOX8-dTuCjkUZf4xQG64DA/s72-c/linux+file+system.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-5717098015992780568</id><published>2020-06-14T04:37:00.000-07:00</published><updated>2020-08-03T10:07:07.272-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Generic"/><title type='text'>FIND WINDOWS 10 PRODUCT KEY USING COMMAND PROMPT </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;Here am going to share a working method to find Windows 10 Product Key using Command Prompt. &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;This is a very simple and easy process, and you just need to follow some of the steps given below.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Step 1:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;background-color: white; white-space: pre-wrap;&quot;&gt;First of all, Press&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; box-sizing: border-box; font-weight: 700; white-space: pre-wrap;&quot;&gt;Windows Key + S&lt;/span&gt;&lt;span style=&quot;background-color: white; white-space: pre-wrap;&quot;&gt;&amp;nbsp;to open the Windows search. You need to search for CMD.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br style=&quot;background-color: white; box-sizing: border-box; white-space: pre-wrap;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;553&quot; src=&quot;data:image/png;base64,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Xzq92nj9i6dXXnvj9HLjlddPX2i8/PrpxZdeO33+pVdPL7z46un5F185Pf/5l0/PvfDS6XMvfOH07PNfOD3z3IvH+MznPn/6zLMvnJ5+5oXTpxufff70yc88d4xPfOa508ef/twxPvbpZ0/H+NSzp4+u45PPnj76yWfG+HqM+I9/+tkbzk9cuMv52c99/vTZZ1846vzMM8+fGl945bXTpz/zudPPfezp00d+5hOnZ5978fSpp589vfTK66fnX3z59LFPfOb0kZ/55OmlV87H2nE8+9wLp1deeeX0K7/yK2/fidqZ9grsFdhPqPeToLfuSdBe2722ew/sPfCo7YHdUO87n70C92MFaqi/9p9+5fS1r/3K6Ze/9p9Ov/TLja8d4xd+6Wunn//FXz599ed/6fSVr/7i6ctf/YXTl77y86c3vvzzp9e/+NXTa2985fTqG18+vfLal04vvfql0xdeeeP0+ZffOL3w0uun57/w2um5z796evaFl0/PPP/S6TPPvXR6+nNfOH362RdPn3rm86dPfvbzp0985oXTx59+4fSxp58/ffTTzx3j5z71udPPffJzp589xrOnn/3Es6ef+cRZnvVnbuY39k8+e/rZTz57KvajjU8/d/pY4+nG84f+qc++cPpsdXzuxdNHPvrM6cP/188d46Ofev707//jJ07//v/++Omn/t3Pnj7y0c+e/v3/+/HTxz/9wumnf+6zp//9//gPp5/4Nz95+tinnj9sn3z6+dMLn3/p9PTTT5+++tWv3o+TvKvcK/AOWYG73FvsJ9T7ydS9ejL1qN3Y73p2s7n3wNu/B+7ypvcOed/fh7FX4F6swMc+/omjkT430+dGuob6ppn+hV86feXnf/HcUH/lF05f/MrPn17/Ug31V46G+pXXv3x6+Wiov3h68eUa6tdPL9RMv/jq6XOff+X0zPMvnz77XA31F05PP/vi6dPPfP7cUH/mhUtDfW54a4J/7lONB5vpmujbRrpmeo5Ls31pqGvCj6b605+7NNTPnz7+dI3wc6dPPP380cQ/X13Pv3x69rmXTs8+//Lpuc+/cnruhVduZP6etncMjecP/8unz7/02vFUvv88eO6FF08/87M/e3wM/F6c5F3kXoF3yArc5d5iN9S7od4N9d4Dew/sPXCv9sBd3vTeIe/7+zD2CtyLFaih/vinPnv60f/xfz79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qU823tvzYhtt3e993Lrftl5T/eqTXXcv26qN8+O9/betxrp9nm8btbLx5ee4rvrkj/p0H9f1PI/rWfe28zqxP34L23p+d/8432Nqo72+r9b3nmptYzvvIzvHmPr07D1i213La7r1en62vfr9fh6zbddH93tf20efvK5sdK8xvW93ju20t4SnRW0Uu9P6oq3Hu+J2mo36oijvzvXzuvb3Xt3W87p7yC6eUPvvUJudOflZjPn9v/L3g5l0GSmmfMmmG3/qE0fPUysb2+re477XmOx8xX7//tCYfw+oRVBPr93ohQAEIACBighEQe2EpqTnpOjWCVCtkqBbJTwnTdtq3DYa870Lvmine63lMe/jORq3vce8t1qPR99t57Xdul8+dfezjdfz2vHdPKY2+idbrad+28f5nuc+Pevett15GvOlMb2b9rO9xvy+9mNd7yN7zdelOfbB8/XsS+tHG9uq1Xzb+dm+Rv/c1/VL/XE9PXteXFf7x/44z/f+h4VyAAAgAElEQVQz+d5dU8++/F72wWtpL4+5z8+y9ff1WHwv+21/ZWPfpt17b8+TjddVn9axjdeM63lNj9nWNmp1edy+6tk2XiPGke/tl2x1H+d4nlut6X1sK3vPiXvaj2ine63lMd17bbUat73Hpo1H323ntd26Xz5197ON2ngf381jav1+ttV6ure99vKzWtvFe9vazv7FVmN6N+1ne437fe3Hut5H9hanUQhboHpMbeyLttEm3nft/azWJ9yxz3tMa72u7KeNex2P2U7PUVDHE+rIU7ziN9CY+XvMfX7WuL+vxyJvrxe/j7+L7Lv3svc6vo/PWsf9XjOu4TU9ZlvbqNXlcfuqZ9t4jRhHvtd6umTrVva+vIb38D62Vb9t4p72I9rpXut6rLuHxhHUFRWMuAIBCEAAAtMJREGt5OUE58SmJKukGC/3yUaJU8kwJlWtEZ+dYOP6vret1nBC17oe1zq6tz9ay89xj2jvZG47z3Ubbd3nfdy637ZeU/3qk50u99vObXe+nmXrS89xL83TmOer1bjXUSs+nqdWNmo1L/ridbtreG/PU+u53ivOmbaOx2NrX7xefA/de9x7+FmtL83V5TE/u3W/22ir2OnaiZX3tj8u2uSHY83z/K629T7u17P7NMdruy+Oa8x7edz76Nnfcdo63b6urRnKTvf21633s3/yI85Rv551dffSsy6/i321vVv5pHuNa73uHvYt+mL/vL73sq3W8DfxPI95jvfzs33Qsy/1+d1tp3nxirbu1zz1u3W/bb2m+m3X3cu2arvz9aw1fOk57qU5GotraNzrqHUsuN/7aF70xetq3Laa3xWjFqVq13Y/bdx90+ZFkRv3tK3HPeZnj8e1fW8bt9HWp9XTBLXe21z9e1JMHGvmbWa21TzzM2f36Vl2enZfvNeY9/K499Gzv+O0dbp9XVt/T9np3v669X72r/t7U/2aF983+q51/Wxfbe9WPule41qvu4d907jfx/55fbW+tJbW8DfxPI1rDEE9vXajFwIQgAAEKiIQBXVMkkpqvpyEnejUqs9tHHchobVsYzsnTPX73klVfbqPczzPrda0j7aVvefEPe1HtNO91vKY7r22Wo3b3mPTxqPvtvPabt1vf9V6fY8tnDevPGPelmWHreaX3bZ+enn2gvll+60WlO0WzC8LOsW0/VLrteybx9yvZ42p9b390LPv7YdbjendxDPa+H3NucvPe6j1GpqvS3M87vm2i/2+j63mR9voU7y3/12/zCC2nhfXje8b9/e66pvJd9nENT1Hrd9d8+fPn18OOOCA8olPfKJ8+9vfLg888EBZtmxZef/731/22WefNX4/6D2iH/G91K/Le3of72s/3R/X8b3G4jru95pxDa/jMdvaRq0uj9tXPdvGa8Q40v3CLbcs282bN7k2/wX8/S+W5uXfd/HbzN9886LLfeKpOWIbv4Pu/Q1077F4rzldMarneE0Tr9PmdE+do7j1Gm49f9o+nhdt3Of53dbr2M7Parv/yrd+7DuyEEfHqdmoNTtzju2VV15Zhrii344R+6Uxv4f6ur/P1Of+uI7vu+u432tqvc0236JsOu/p5SkLti1PWfDMjXY9ecGzylPmbV0222L+5FvFd/E7IKgrKhhxBQIQgAAEphOIglqJ1clVrRKsWiU59zu5q1WfWyc/tU7Y3Xuvp3leT4Wk7JzMbaM+7ev+OMf26xr3XNl7vt9Fz/Ld+9kftbKxnddQ67447nW7rdf1PPlgv/d4+sJyyq47lnP33a18+IB9yicPfk657NDF5XMH71f+14F7lw/st1s5Z/edyzHbP6NsM//R/yWJ19T+utd60SfvoT7dx3fSs79V9Mm2XttrqFWf99Gz9zIjtXG8u4b3j2uqL86PNr6PNvbPa3iu9/L+6o/3XsN+d+fH52g7rV/j6o923t99evb+srXfGn/GM55RzjnnnHL77beX6667rlxyySXlL//yL8tXvvKVcscdd5RrrrmmnHzyyeWZz3xmWbBgwRr7RH+8rtb0Xvaja+f+GOPq8xXXir5qbY15D7X+7urXem415pjyemp1eR3fz9tii/LcRYvKydttV/5sp53KxbvuWj63667l73ffvXx5553LJ5797HLBDjuUM7beuuy86r8J2lf+eo24pvrXNe65cb7fxb7LRvdeW61sbOc1vF933HO7rdf1PPmgy+tFnzxmtrY7eKutymELF05Etdb3mvG97adar+N7zfE+an2SO02MWrhGgbquvjj+mycdX/Y5/a1ln9N0vWXl9ZtvKfuc+kerr71P/aOy9ym6/rDsffKq66Rzyt66XqnrzWXvE99cDjzxDeVdr9hjDbFvv+y7947P8YTaf4da720eZtF99rfTuC/3SUzrD8He9ra3lbe+9a0b9frzP//z8s///M8TAe9vF/3RvXzXmOPIMdG1c3/f3/8S05vO365sutWzZn8telbZcocdyqL9dipb7rhD2XTh7Oc+Zd625albLFgd435XvQeCenrtlu5dvHhx+Yd/+If0OiwAAQhAAAKldAW1iw0nbRcWSnBO8k7mTu6x3/Ya8+XkrjHfew2t+5Stdy5P3P/k8rjn/27574f9z8ml+8cfdEZ58vb7rS5yXDQ42Wo9+6s+FQ8+BfOY9vEV59tP++Sx2K++7rOLXq+pcdt5jcjF4xrTqfNJO+9QvnjY/uVbRxxYrjvy4HLdEUvK9UcdVJYfeWBZduSB5boX7l+uPfy5Zenhi8u/Hfqc8pHFe5X9t1lUtly1j9f2e6v1ZV895r2ntdFW7+I/2HC/W/kd3zXaaSzy0BzZeq5a2fg5rqN+XV1fZaM+z7FdnOv39ZhtvZ/X1LjmxX3iHL9L7Ovea02tEffQswtVj2letFW//NAeKsRvueWWyWn08ccfX973vvdNivS/+qu/Km9605vKV7/61fKtb32rvOENbygveMELJsI67qe1vZ76vVdsfa89uz5pjplNG499uvdaXqe7p/plI1v7qedorzFdi7bYopz8zGeWy/baq/z4gAPKHb/xG+XeP/uz8tAXvlAe/vrXyyO33V4e+cEPyoNf/Wq552MfK7e8/OXl+p12Kq9ftKjMC/Gh9ePlvdW6fy5+/y9atKi84hWvKL/3e79XXv3qV5czzzxz0p599tnlNa95TTnrrLMmrcb0fMYZZ5TXvva15VWvelXZbbfdZmQr381Z77PVvHnlhMWLyyHbbFPmB8HffW89+/K3MBOv5zaKTwtSCdVp97Pp01yJ9A8fv6g8+TUXll864/Pll17zuZXXqz9bfulVK6/H/tbflseevuo67TPlsb+p69Mrr1M+VR6r6+RPlcec9MnJ9dgTLymv/Y2jVv8YevTR72CBHcemCeoYq44TtWIym9//EtQS0/opkj322GOjXkcddVT5+7//+9WC2t9T/uo9/O3tf2x9Lxv/PnSf1nGMTBuPfbrXPJ1Mr4+YfurTn1W2f9Gu5fnvWVyOuXBJOeQd+5VtDt55vUT1k+dvu/r3gP1Qi6DeSJUqgnojgWVZCEDgF5JAV1CryFBCtmBwUlbrywVaTPiyt63HnRTd71br63rCc19ZHnva58omv7t0rddjXvPVieDWuvLP67q1H1pTe6jffbbx3m5lK5tp4x5TG9fyXM2bdq++WBjLbrLW055W9tnm6eWvD3xOufaYQ8v1Lzq0LD/64LJcQtrXEUvK8sl1QFn2wv1XXocvnojrbx66bzlrtx3KsxbML1sEIRr993vYt+i37+Wf30n38R3cr/nxsp3HvYb3edR28/LaYx5frvvr/6N8/4JN1nn909sfUw7b50lli80fFUT2x63Wlu/aW5f3sk+2cxsZyDYWzHr2Grb3+m41Hsd8rzZeXityVZ+uGJ9ab6+99irXXntt+dSnPlUOPvjg8rWvfa184xvfKCeeeGKROJP9EUccUb7+9a+Xiy++uLz73e8up5xyymRM68V9fe9+7+l+v79j0O+jcc8xT/ep3/N0L380L/P7X39w9JyFC8sf7LRTueElLykPnX12eeiSS8q9K1aURx55pDzy05+Whx/5aXn44UfKQ7oeerg89LCuR8rDjzxS7v/a18qtJ51Uzt1mm7Jo1XeXT/bP/rpVvy6/r/rdZxu/r1uvN23cY2rjWpqrnzY4//zzy4c+9KFy2223lX/9138tN998c/nMZz5Tvv/975d/+qd/Kt/73vfKd77znclPHuhbf/7zn5+MSYTvueeeq/2MPttf7aEff993773K2b9zVtlzl11Wv8tkLPH73+Jzmhi1ULWQdmtbj3sNP6u94KULyxNfdfEqIf258kurxPRjf+uzZbWYlpCOYvrUT68W0o89+ZPlsRLTr7x05XXipeX0lx1VLgz/f2z74327fqm/+yPf+ofJzMys1arPvP191Tp+PCY7CWr9gZjE9L777lsOOeSQsvvuu5dddtllg18vfOELVwtq+2j/Y9t9B485ljfE73/9mPdsBfVTFz2rbHf4zuWojywpx192yOR62d8dXI7+8AFl20N3LhLbs13L76J39DdBUG+k0hRBvZHAsiwEIPALSaArqF1MxNYFZrcvJj+NuSCZVojaVmObPWO38n+dePFaRfQ0kS1h/ZQdnjtJtE62Wlf3fpYffra/Egm+j++iuer3GvbRa3iO7fQ87d3UZ5vY6n7b+fPKKbvoVPqAcv0xh5YVL1p5LT/mkEfF9KoT6mmCetnhi8uyw55brn7+c8oF++5aDtx6UZm3Slx4L/s5YRtO6eO431t9usRI83Qf/Y9rycZreF5so+38eZuXj/zOL69TSEexfcU7H1OOO/BJq5l6L69r/9zvvdVv/22rsW6f59vG82RnW7VxXdlEHnFdz/O4nrtcbe/+0047rfzoRz8qL3rRi8oHPvCByY99H3PMMau5ao1tttmmvPOd7yxf/vKXJ6fX733veycnYhrr+qNi2f3ay++m/eyX95adBbL69Ox3ja3WiGt5Tbdez89qvVecp74d588v79t997LsyCPLzz70ofKz65eVnz7wQLnzJz8pX/7fXynfuurb5cGHHi4PPvhQeWDVdc+995Xbbr+j3P/Ag5O+yfgPf1huOPbYctSq37vxnXWvyz7EZ/nmZ/u7IX//S1BfcMEFk58wuPfeeyd/H17CWieLEtYSYMuXLy8rVqwoN9xwQ/nud787+QmE++67r/zbv/3bJAZe9rKXle233371txFD+ew/xNjpGZuW3z7lqHLaK48vWz990epv032vyN7fRGv4feO4WK1NjEahbPHaFa1+dmu7D/z6wvLE3/rYmifSPpWOQloierWQXiWiO0L6MSdcUh7zG58op/76EZOT77hX9977+726glo/9h0ZxNgQSz/LJto5rjQeBbW+m34k+7zzziv6PayfONiQwjoKavumNvozV7//ZyuoJaa3P2bXcsQHD5gI6Zd85qBy8Ln7lWMvObAc/8VDytEXLik7HLNr2Wzr2YnqaTG+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&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Step 2:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span style=&quot;background-color: white; white-space: pre-wrap;&quot;&gt;You need to right-click on the ‘&lt;/span&gt;&lt;span style=&quot;background-color: white; box-sizing: border-box; font-weight: 700; white-space: pre-wrap;&quot;&gt;CMD&lt;/span&gt;&lt;span style=&quot;background-color: white; white-space: pre-wrap;&quot;&gt;’ and select&amp;nbsp;‘&lt;/span&gt;&lt;span style=&quot;background-color: white; box-sizing: border-box; font-weight: 700; white-space: pre-wrap;&quot;&gt;Run as administrator&lt;/span&gt;&lt;span style=&quot;background-color: white; white-space: pre-wrap;&quot;&gt;.’&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br style=&quot;background-color: white; box-sizing: border-box; white-space: pre-wrap;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;327&quot; src=&quot;data:image/png;base64,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+tu27NO54ee6NeemO+5Mm7Zs79l5++ZtSdfdO3en226/I91488a0Zu2GtGXrXenWjVvSjp170ra77kk3b7g9rVl7S9qx88G1ah1btm5PO3fuTD/96U8nt1HMBAIgwEk0pz/jO/0BW7DFB/CBWfCBtsQ5ypMngAAITA4Bkegf/+Sn6cc//mn60Y9/kn74I10/7l3f/+GP0/d+8KP0wPd+mL77wA/S/Q98P9333e+lvfd/L+2594G0e+93066996edu+9LO3bdl+7euTfdec/etH3HnrTt7t1p65270pbt96TN23ak27fuSBvvuDvdtuWudOvmO9Mtm+5MG27fntZv3J5u3rgt3XTb1t514613pBtvuSOt611b0roNW9LaDQ+WD9Y377vf137LlrTuli1JY2/SddvWdLOujbq29eq3btqeNsmOO+5Ka27anK7+9o2966Zbt6VrbtiQrrluffrmt9alNTdtStdcvz6tv217+s6Nm9KVX7s2XfGlb6Sbb93Wa7tl47a0/c4daePGjemBBx6Y3EYxEwiAACR6FhI8bIBo4AP4AD4wPh+IpLhtnTwBBEBgcgjcvH5Djzw/SKAfJM8i0fsI9Pd/mL77vR88SKK/+/1073e/l/bcJxL93R6J3rnn/nRPj0Tfm+66RyR6T9ouAn3XrnTHnTvT5m33pE1bRaLvThu33JVu23zngyT69u0/J9EPklwR3xtv1bU/gRZx/gV5FoGO188J9s9JtIh3j0jfdsfPSfS2tH6jyO/WtGHjth5x3ya7tt2TtmzdkbZsuydtvXNn2rp9575S/TpV1xp0bev135Pu3LG7d/quDwy2br8rrV23rveI9+R2iplAAATa5hM8zs1jnJ16jBNiMj5iArZg2xUfaBvoojxpAgiAwOQQEIlef+um9L73/x/p7Rf9t/T2i97XeL3tovelfdc73pfe1rvem976Dl/vSW+98KHXWy58T3rI9fb3pLe8/d3pgt71l+mCt/9luuBt8XpXuuBtf5HeHK+3/kU6P7/e8s50/r7rz9P5b3nwetNb/jy96YJfXG+84M9T4/XmP0tvfMh1UTrvzX/280v1i9Ibfn6v+T/y0c88SKLXroVET85NmQkEegjEXKGmDomGREOi8QF8AB/olA/UBLeSDLkCCIDA5BAQib7q6mvTWS/7rfS85z0vnXnmmb3r13/915OuM844I51++unpuc99bu867bTT0qmnntq7TjnllHTyySf3ruc85znppJNOSitXruxdJ554YjrhhBPS8ccfn4477rje9exnPzvpOvbYY3vXs571rHTMMcf0rmc84xnp6U9/eu86+uijk67ly5f3rqOOOio99alP7V1HHnlk0vXkJz85PelJT+pdT3ziE9MTnvCEdMQRR/Suww8/PD3+8Y9Pj3vc43rXYx/72PSYxzxm33XYYYelQw89tHcdcsgh6eCDD+5dj370o9NBBx2UDjzwwN71qEc9Kh1wwAG965GPfGR69KMPSW+76N2Q6Mm5JzOBwH4IlPKGUjskmuS5U8lzV07KsJNTXXxgfD5QCmg17ftFTG5AAATGikCPRH/z2nTWy387Pf/5z+8RaZPpnEibTItIm0w3EWmRaZHoSKRNpkWiV6xY0btEpk2kn/nMZyYRaV0m0U972tOSLpFpE+mnPOUpPRItIp2TaBNpk2gT6bYk2kS6kUS/491p67Y701pOosfqlygHgSYEanKIKAOJhkRDovEBfAAf6JQPxCDWtt4UOGkDARAYDwI3rd+Qvv6NB0+iRaJf/OIXpwsvvDCdc845vZNon0afe+65vXudSC86ib4DEj0eZ0QrCAxAoG0+AYkmee5U8szp3vhO98AWbLviA20DXZQfEEPpBgEQGCECN928If17INHvfOc701//9V+n973vfelVr3pV+sd//Md01llnJbW/+c1v3vdI9yKfREOiR+iAqAKBFgjEXKGmDomGREOi8QF8AB/olA/UBLeSTIt4iigIgMCQCIhEf+2qa9JLX/Zbvce53/Wud6W/+qu/Sq973et69y996Ut735EWkf6Hf/iH9IIXvGDhT6L1f6J5nHtIx2M4CCwBgVLeUGqHRJM8dyp57spJGXZyqosPjM8HSgGtpn0JcZUhIAACS0RAJPqrV317H4n+3d/93fTBD34wXXTRRenlL395r75q1aoeoT7vvPPSH//xH/dOqHVKrR8YW7TvRL/1He9OW+6ARC/R3RgGAkMhUJNDRBlINCQaEo0P4AP4QKd8IAaxtvWhIiyDQQAEWiFw083r05Vf/1Z6ydmvGvjDYvrBsd/+7d9Or33ta9Mf/uEfQqL37m2FNcIgAALDIdA2nxiKRH9z3aa0ftOd6WZdt29PN96+Pa3buC2tvXVrWnPr1vSdW+5I39mga0u6Yf3mdP36Ten6mzel/7h5U7r2ptvTNTfq2ti7vr1uY2q8ft5vOY1fo394v3F7WnvrHekr37ghrb1ta2/ua9bclm66fXvv/iPfvqtTSSGnVuM7tQJbsMUH5ssH2ga6KD9ciGU0CIBAGwREor/y71dXkWh+nfuQ1DuJ5nHuNi6GLAiMDIGYK9TUhyLRm+7clX7045+kH/7ox+n7P/xxeuD7P0zffeD76d7vfi/t3vvdtHPPfWnHznvT9h170ta7dqXN23akjXfcnW7dfGfacPv2dPPGbekmEeBb7kjrbtmS1m148Fq7YXNa+/P6ulvuSDfdeke6+bat6abb7uiNXX/btvTt625Oa27anK75j/Vp7fot6aZbt6VvXn1DWn/b9rT3vgfS337mOkj0jJyuHf7ko9JL/+dz2Y8Z2Q8I5XwRykXcz5rgVpIZWbRFEQiAwEAEbhaJ/ppI9CsHnkRDog9Jb3vHuxM/LDbQrRAAgbEgUMobSu1DkeiN23amV/7Wq9Mrf+t30itf9TvpFa/8n9IrfvO308te8ap09stflc562SvTWWf/ZnrJWa9Iq176svTil5ydXrTqrPTCF700veCFL0m/8YJV6Xm/8aJ05vNfmH79eS9IZ5z5G+n0M56fTjv9zHTqc389nXLaGenkU09Pzznluemkk09LK59zajrxpFPSiStPSSeceHI6/oTnpOOOPyk9+7iVacWzT0zHrjghPWvF8WnL1rvShy771khJ299+5tq0bNmyh1wiiIuYxLZZcy2JbsJXbcK+zXyzKPsHF7yn5zuzaBs2Qaq75gOlgFbTPpbIi1IQAIFGBHok+t+vTqvOgkQ/+tGPTvof0X3/T/RF707btt+V1q5dl/byOHejT9EIAuNCoCaHiDJDkejbtu3sfbL4ohe9KOm7LPp/f7r0f/7iD0KcdNJJ6cQTT0zHH398Ou6449Kzn/3sdOyxx6ZnPetZvX98//SnPz0dffTR+/7hvf7J/ZOf/OTeP7r3P7fXP7X3P7Q/7LDD0qGHHpoOPvjg5D9K/qf1j3zkI9Ptm7eNlESfeMaLegTov/2/n92PzIncQaIHE5A2JFpkMyb0OsEWkb7gr/6f/dqjTBfqXkcXbMXGwT4NRtPFKAaxtvVxBV/0ggAIPBQBn0RDon+Rr/Yj0W+/6D1p+513Q6If6kq0gMDYEWibTwxFom+9454eif7ABz6QXvziF6fzzz8//d3f/d3USfTGEZJoEWiI8nAJ8zAkWmRlHvYAEj2cD0FawS/6QNtAF+XHHoWZAARAYB8C69dvSF/9+rfSqrN+k8e5K06iL/yz96a77r4nrVvHSfQ+J6ICAhNCIOYKNfWhSPSGLTt6fxT17wl0Ev2Sl7yk9z/+9H8AzznnnH3/mmDSJ9G33b51JCfROv1cyuPE+WPJTd8HFrEUOdTpdpT3iatJl/vyR5pNLPPHzH2S68eHPT4/RVdCKhvcrzL/sMC6pctYWN52xsS2SafmHZZEey2ey2uP2MX15bbK5tgvPR4r2Rxrz+O1qtScblfZD5so63miLtVL+MU5qEMc8YFmH6gJbiWZCcVipgEBEEgprd+wIX3tG99OL4ZE73tyst9J9Dv+/L3pnp0707obb+Rxbt5BIDBhBEp5Q6l9KBK9fvPd+z5ZPPPMM3uPcvuHIab5OPfGzaMh0Sa6tYmsyZuJrMc1kTAT2Ei4TOZy0ikZ6bA+lW6TrNtNNnO7rTcScdk6yE4TRc0tHfk8OTFtWqfa8vHWk5eSy22SjNdlea1da4xrj33Sk69VbZG4RnIb2yUnvSq9PuMQMXBbjrXb477KNu+B7aRsJkfgAi41PlAKaDXtE47JTAcCC43ALbfckq765jXpxS/lJNpfP+xPot+Xdu7anW6ERC/0+4bFTweBmhwiygxFojdsmU0SvfmO7SM5iRaRaiJ1pSRP8pFoWc6ELZI1EzXLqDQBy8lh03iTaI2JOmSDrthmvYPWYrJqnR6X2yPdaotrLZFE2x5lo22xXsJbc0VS6rWb5FqH8JWOvF39uX0lu4xBjlU+vh821h3tyMfbZkpIIz7Q3gdiEGtbn05oZlYQWEwERKK/+a1r04tf+op9hy56ctEHL/odnTPOOCPpAMaHMKeddlrSFQ9jTj755PSc5zwn6clGP92o39o54YQTer+3E39zZ8WKFUmXf3vnmGOOSc985jN7v8HzjGc8o/cbPPodnqc97Wm9a/ny5emoo45KT33qU9NTnvKUpN/l0fWkJz2pdz3xiU9M/n2eww8/POl63OMe17vib/Xo93r8mz363Z5DDjlk32/3iEAPJtEHp4ve+d60e88eSPRivl1Y9ZQRaJtPDEWib9v64Hei4x9E/xGMf/z8By/+kfMfN/1BG/UPi22/c8fQJNokKRLffsluPwKncTkRzO+tWyQwJ5y2JRI7EUnp8DiXbfR6jMt8DU3zWlbzR2LbZLdlZVO+JvfFsolEmzBHudLaS+0aa2Lr/czvrT/HwO0m18JEbf2wUX++Fkh0e6Jk7CnBLveBtoEuyk85RjM9CCwUArfccmu6+pr/mGkSLQIt8qwftBVZNkkWQTYpLv2Q7a/92q8lXY94xCP2XQ9/+MNTfsX+pjHqP/CgR/dI9J49eyHRC/UuYbGzgkDMFWrqQ5HoLXfv3vfJoj9VnAUSveOeXRMn0SZZebLn+5zgtSG7TYQt1+d52ujVGOkR4YuXT1Cb5vU8cX7LmaBaxmUbEh3tUF3zWI/LOLfbVPabxzb6g4hxk+jcFkg0RDD6KvXh/KEmuJVkZiVYYwcILAICt956a/r2NdenF73kFb3fztGhSzx4mfRJtE6fRZh1uqz/+vKYxzymd1p84IEHpgMOOKBHhH/lV34lPexhD+tdv/RLv5R05bnJqO81xyN+7ZE9Eq1/bcXj3Ivw7mCNs4ZAKW8otQ9ForftvLf3SE78gzgsidYngPq+iD6Va/pD5j9oTaX+6P3yL/9y2rVr99AkehApy5PgGhIdCWEbspsTQM3dj0jGeWyn/uDH02CTutiWn8I2zWt9cX7LjYJEm+R6nqYyzh37c+Ia+3IbIdHDkZiILXWwnLQPlAJaTfusBW3sAYF5RqBHoq8ViX75xEm0HuPWY9s6YRZZjkT5V3/1V3v54iQIci3hfvjDH5He8c739H5QDBI9z+8K1jarCNTkEFFmKBK9fee9vR8Ta0ui9Si3vnuiR2VElGv/wNTKjYpEm2jWJIgmoCJrTfI5wZsmia4lkCaeTcQ2J7LamyY5YaG+SNab8LFcSUcck8/tPrXr8n0svWaVavd9Tvy9j5azDtmldXh/+2HT1NfGlzwnJeQUH2j2gRjE2tZnNXhjFwjMIwKTJtH6LrTySz2GrcemfRgzS2S5lMtCoufxHcCauoRA23xiKBJ95XW39H4IooZE6/vQenRGJ8ylPyCjav/KN9eO5CRaCaxsKhGzPMGVbBNZNGGLxGwWSHS0R2sx0XN7Exn0mnMim99bzqS0CRfLuBR+w5Boz2X7rVel5hfmbpOM5huWRDf5Rk64NafbPD9lMzkCF3Cp8YG2gS7KdymgYysIdB2BNetuSv/0yS+mF6562chPovWjYscdd1zSibNOm/W95XEczChXmMQlEv2/vumidPX169N119/Av7jquvNjf+cQiLlCTX1oEv3c5z53v++3xMe59WuK+uM26T9qoyTRJpL6A5ond+qLxMwkLieCGpuTyGmSaK8p2mTbZatJqOXy9QiHnDSblEadbtNaY3uOo+81d9Nc7neZz+12leqTHtnudq/N61K7bRuWROd7a735OppssH2UEEd8oJ0P1AS3kkznojoGg0CHERCJ/meR6Be/bN/X/+LBy1K+E61DGf0orYmzvsanWNz1CxLdYUfH9LlAoJQ3lNqHJtH6NwTxD6JJtB6n0XeUp/FHbZQk2smtSGDTWiKJlqyJZ5TNiZrkpkmiNb/Jnu3U+nKi57XkhFDjm4is5a1Tpdc6KRKt+WRvtMF2qM+X15/vTY6B5a3T5NxrVXvuG7lO64hyJRnLUv5ir8ACLHIfKAW0mva5iPQsAgQ6gsCDJPqKoUm0/r2VHtXWj4LpUW091diFR7TzXKTfPSS6I06NmXOLQE0OEWWGJtGnnHLKfiRanxBO+1PBcZDoPInjfrET+0ii8YXF9gX2f/L7H4NY2/rcRn8WBgIziMCwJFpPND7rWc/q/U9m/Xr2pJ9s7Ed6R90HiZ5BB8akhUKgbT4xNInWHzidROuRHP364aj/qCxFHyR68kntohEJSDQ+tmg+P0vrbRvoovxCZQQsFgSmjIBJ9AuW8Di3DmV06qxf0p63U+em3BYSPWVnZfqFRyDmCjX1oUm0HrHRI92z9OkgJBqCM+6EHxKNj43bx9Bf9rGa4FaSWfgsAQBAYIII7CPRLzq76jvRp556ahJ51r87ndZXApsI7iTaINETdEymAoEGBEp5Q6l9aBKt76hM4o9Lmzkg0eXkk8R8NNhAokeDI/4IjkvxgVJAq2lviJs0gQAIjAkBk+jfeNHZ+/4lavwdHf+wmH6k9sQTT0xHHnnkRP6LS5ucclKykOgxOSFqQaASgZocIsoMTaIn9celzTyQaBLzpSTmjMFv8IFu+EAMYm3rlbEUMRAAgREgsI9Ev/CsIokWgdavbetfVC3CY9ulfBYSPQKHQwUIDIFA23wCEh1+sZkEuhsJNPvEPuEDi+0DbQNdlB8ivjIUBECgJQI9Ev2vV6TfeFEziV65cmXvR8Me/vCHz9xTjSWyO672B0n0O/g/0S19DHEQGBUCMVeoqUOiIdH7/u0TxGSxiQn7z/53xQdqgltJZlTBFj0gAAKDETCJfv6LzkpnnHFG74do/WO0xx57bNIvbi/y6XMk5JDowf6EBAiME4FS3lBqn0sS/W/fXJs+dNm3IId8QIAP4AP4wBz6QCmg1bSPMwCjGwRAYH8E9pHoF/6CRItMP+1pT+N7KLUAACAASURBVJupH6SNZHZadUj0/r7DHQhMGoGaHCLKQKLnMMHsymkSdnLyiQ/gA0vxgRjE2tYnHZSZDwQWGYGcROu/uTz5yU/m9HnZsoc8vg6JXuR3CmufBQTa5hOQaEg0J3X4AD6AD3TKB9oGuig/C4EaG0BgURD4BYl+adL3nx//+MdDoBsItE6/IdGL8q5gnbOKQMwVauqQaJLnTiXPSzm1YgynnfjAfPlATXArycxq8MYuEJhHBEyiTz7tzHTIIYdAoAsEGhI9j97PmrqGQClvKLVDoiHRkGh8AB/ABzrlA6WAVtPetaCOvSDQZQRMop+54kQIdB8CDYnuspdj+7wgUJNDRJkhSfStD/lOx7R+kCHOyw+LzdepE6eI7Cc+gA9EH4hBrG19XoI96wCBLiDQI9GXfSk949gTZzJfjLnjtOs8zt0Fj8bGeUagbT4BieYEqlMnUDGRpg6xwgcW0wfaBrooP88JAGsDgVlD4MGTaEh0DUGHRM+a92LPoiEQc4WaOiQaEg2JxgfwAXygUz5QE9xKMouWFLBeEJgmAiLRH/nXL6VnchI98CQeEj1NT2VuEEiplDeU2iHRJM+dSp45eVzMk0f2nX2PPlAKaDXtJAogAAKTQ6BHoi/7UjoGEg2JnpzbMRMILAmBmhwiygxFor9y7S3pfzn/z9OfvuUv0nlve1d6w1tK11+kN1zwzvSGC2Lputrfmf601//O9Ma3viutftNF6Y/PuzCd+4alXV+/7pb0ocu+BTnkAwJ8AB/AB+bQB2IQa1tfUmRlEAiAwJIQgEQ/9P9Blx7t5iR6SS7GIBAYGQJt84mhSPQ/XXlT+vtPfX0mr//r8jUkz3OYPMfTKOqcTuIDi+kDbQNdlB9ZtEURCIDAQAT2kegVKweexJbI5aK0/+rDH5FWv/HCdPX169N119+Q9u7dOxBfBEAABEaHQMwVaupDkeiP/sc96dLrZvOSbaNMsM99x/vTqle/bqQ6R2kfuhaTTLDv7Psi+kBNcCvJjC7cogkEQGAQApDo+pNoSPQgb6IfBMaLQClvKLUPSaIXI4H98L9t6BFoEekP/H9fgkhzwo0P4AP4wBR9oBTQatrHG4LRDgIgEBGAREOioz9QB4FZRqAmh4gykOiKRPAv/u6j6c3v/797BFpEehFPfljzYnxgxD6zz13wgRjE2tZnOYBjGwjMGwKQaEj0vPk065lfBNrmE5DoChL9O69/a/o/P/Xt5BNp1WOiqXs96q1+yaquKyfcujcZt4zKXF/UTR1Sgw/gA/jA/j7QNtBF+fkN/6wMBGYPAUg0JHr2vBKLQKAZgZgr1NQh0QNItAmyk1gTYd+rtIwIsYi0+3Qv0ux7jc3bdMqdj7M85f6JM3iABz6AD8gHaoJbSaY5dNIKAiAwDgQg0ZDocfgVOkFgHAiU8oZSOyR6AIkWCY5EWN+JFumNybxJdH6inMuKROuKY1XX6bXIdN7OPYQBH8AH8IGH+kApoNW0jyPwohMEQKAZAUg0JLrZM2gFgdlDoCaHiDKQ6AEkWoQ5J8dqiz8wZhIdT6GV+Prxb7c3nWJLLifqJM0PTZrBBEzwAXzAPhCDWNv67IVtLAKB+UUAEt2ORL+ef3E1v28GVjbzCLTNJyDRfUi0H7UWac6veKIMiSa5d3JPiS/gA+P3gbaBLsrPfBTHQBCYIwQg0ZDoOXJnljLnCMRcoaYOie5DokuPWeek2fcqYwKt02rpcFu/x7njybblKcefjIMxGOMD3fOBmuBWkpnzHIDlgcBMISAS/S+XfTkds2JlWrasnlAuoqz+TzQn0TPlvhizYAiU8oZSOyS6QKJNjP0odp5oR4Jt2UiY/Sh3/K6zSHT+KLge5VZbrp/77iX27Bl7hg9MxgdKAa2mfcFyApYLAlNFABJd/8EBJHqqrsrkIND6R0sh0QUSLcIbSXGeHPtRb7WbRLv0o9/56bJ0+vvPluk3Rz4n95NJ0MEZnPGB2faBGrJckiFPAAEQmBwCkOiWJPq8C9PV169P111/Q9q7d+/kNoqZQAAEINHTSH5Nnkun1rbJJNr3lLOdqLM/7A8+MJs+UCLINe3kCSAAApNDABINiZ6ctzETCAyHQE0OEWU4iS6cRLdJniHRs5lot9lDZNlDfKA7PhCDWNv6cCGW0SAAAm0QgERDotv4C7IgME0E2uYTkGhINN/HHoEPQMC6Q8DYq+7vVdtAF+WnGaCZGwQWDQFINCR60Xye9XYXgZgr1NQh0SMgUJxEdz8ph1ixh/hAd3ygJriVZLob3rEcBLqHACQaEt09r8XiRUWglDeU2iHRIyDRJN/dSb7ZK/YKH+i+D5QCWk37oiYHrBsEpoEAJBoSPQ2/Y04QWAoCNTlElIFEQ6J5nBsfwAfwgU75QAxibetLCayMAQEQWBoCkGhI9NI8h1EgMHkE2uYTkGiS504lz5widv8UkT1kD4f1gbaBLspPPiwzIwgsLgIi0Zdd/vX08t86J6048ZR0/EmnpROe89x0Yu86PZ1w0nP3XcevfG7qXSc9Nx2vy/cu92s7LR2/8tR0/EqXqvtym0u3n5KOX/ngddx+5anpBNl10mlpxQknp2OevTIds2JleuaA6xkrVqa+17Er0zNaXMeecGq66N1/zb+4Wty3CyufMgIxV6ipQ6Ih0ZBofAAfwAc65QM1wa0kM+UYzfQgsFAIiERfveb29LVrbk5fuXpdulLXt8LltmmXsunqdT0bv3L12tS7vrk2fWWS19Vr09evuyVddd1N/J/ohXqXsNhZQaCUN5TaIdEkz51Knoc9wWI8p6D4QPd9oBTQatpnJVhjBwgsAgK33nZbuu6Gdemb117PVYnB17/57XTDDd9J99577yK4CGsEgZlBoCaHiDKQaEg0JBofwAfwgU75QAxibeszE60xBAQWAIH//M//THfffXe67bbbuCox2LhxY7rzzjuT/rbxAgEQmBwCbfMJSDTJc6eSZ04Ru3+KyB6yh8P6QNtAF+UnF46ZCQRA4Gc/+1n66U9/mn70ox9xtcDgJz/5Sfof/+N/4EAgAAITRCDmCjV1SDQkGhKND+AD+ECnfKAmuJVkJhiPmQoEQAAEQAAEQKAjCJTyhlI7JJrkuVPJ87AnWIznFBQf6L4PlAJaTXtHYjlmggAIgAAIgAAITBCBmhwiykCiIdGQaHwAH8AHOuUDMYi1rU8wHjMVCIAACIAACIBARxBom09AokmeO5U8c4rY/VNE9pA9HNYH2ga6KN+RWI6ZIAACIAACIAACE0Qg5go1dUg0JBoSjQ/gA/hAp3ygJriVZCYYj5kKBEAABEAABECgIwiU8oZSOySa5LlTyfOwJ1iM5xQUH+i+D5QCWk17R2I5ZoIACIAACIAACEwQgZocIspAoiHRkGh8AB/ABzrlAzGIta1PMB4zFQiAAAiAAAiAQEcQaJtPLLv//vsTFxjgA/gAPoAPdMUH2ga6KN+RWI6ZIAACIAACIAACE0Qg5go1dUg0HyLwIQo+gA/gA53ygZrgVpKZYDxmKhAAARAAARAAgY4gUMobSu2QaJLnTiXPXTkpw05OdfGB8flAKaDVtHcklmMmCIAACIAACIDABBGoySGiDCQaEg2JxgfwAXygUz4Qg1jb+gTjMVOBAAiAAAiAAAh0BIG2+QQkmuS5U8kzp3vjO90DW7Dtig+0DXRRviOxHDNBAARAAARAAAQmiEDMFWrqkGhINCQaH8AH8IFO+UBNcCvJTDAeMxUIgAAIgAAIgEBHECjlDaV2SDTJc6eS566clGEnp7r4wPh8oBTQato7EssxEwRAAARAAARAYIII1OQQUQYSDYmGROMD+AA+0CkfiEGsbX2C8ZipQAAEQAAEQAAEOoJA23wCEk3y3KnkmdO98Z3ugS3YdsUH2ga6KN+RWI6ZIAACIAACIAACE0Qg5go1dUg0JBoSjQ/gA/hAp3ygJriVZCYYj5kKBEAABEAABECgIwiU8oZSOySa5LlTyXNXTsqwk1NdfGB8PlAKaDXtHYnlmAkCIAACIAACIDBBBGpyiCgDiYZEQ6LxAXwAH+iUD8Qg1rY+wXjMVCAAAiAAAiAAAh1BoG0+AYkmee5U8szp3vhO98AWbLviA20DXZTvSCzHTBAAARAAARAAgQkiEHOFmjokGhINicYH8AF8oFM+UBPcSjITjMdMBQIgAAIgAAIg0BEESnlDqR0STfLcqeS5Kydl2MmpLj4wPh8oBbSa9o7EcswEARAAARAAARCYIAI1OUSUgURDoiHR+AA+gA90ygdiEGtbn2A8ZioQAAEQAAEQAIGOINA2nxgpiV6+fHlatmxZWr16dacSMk6MxndiBLZgiw/gA6P2gbaBLsp3JJZjJgiAAAiAAAiAwAQRiLlCTX1kJPqKK67oEWgR6UMOOSRt3rwZIs3pFj6AD+AD+MDIfaAmuJVkJhiPmQoEQAAEQAAEQKAjCJTyhlL7yEi0Tp91Cv2hD32oV15yySUjT5xGfZqBPk7I8AF8AB/ong+UAlpNe0diOWaCAAiAAAiAAAhMEIGaHCLKjIRE69RZp88nnXRS7wRaZFr1PDldtWpVj2B/4xvfSK5r3MUXX7yfrMar/+Mf/3jyI+IqdW+dmvPCCy/szSt56YG4dy8Z9n5Ssnf4AD5Q6wMxiLWtTzAeMxUIgAAIgAAIgEBHEGibT4yERIu8+hRaSdCrX/3q3v2aNWv2kV61mziLYIsAizybJEcCLF1q1yWZSJat0yff6tOj5NZXm4QhR8KOD+AD+EA3faBtoIvyHYnlmAkCIAACIAACIDBBBGKuUFMfCYk2OTbB9SPdIrYxSbWcSK/bNcYnz27zyXL8XrWJuk+trctzamyUty7KbibJ7Bv7hg/gAyUfqAluJZkJxmOmAgEQAAEQAAEQ6AgCpbyh1D40iTYJjo9vu00nyTEJMvGNbaqLNOtye06q1e4fLpMO3ZtUS1Yn35GYWw8lSTg+gA/gA/PnA6WAVtPekViOmSAAAiAAAiAAAhNEoCaHiDJDk2idNpsEN5Xxe8z9SLS+0+xktx+JFmG2nMi6HuvWWI3JT74tRzl/STR7yp7iA4vrAzGIta1PMB4zFQiAAAiAAAiAQEcQaJtPDE2i/Z1mPWYdL38vOpJek2j9sJgTYJ8wRzkRYumNj2dLt9r1qLjGxj7V1ReJuPVTLm6izd6z9/jAfPpA20AX5TsSyzETBEAABEAABEBgggjEXKGmPhSJ1imzyGt8lNtJq4mt+k14TaL9g2Eixj5Fjo9jmxBLr2R82i1Z6xLpVrvGud+PetsGyvlMoNlX9hUfWGwfqAluJZkJxmOmAgEQAAEQAAEQ6AgCpbyh1D4UifZpc/xl7Zjc+he0fXpsEq2TaJ9gq4yPfGu8SLRkpdckW/fxBDsScMloLhPsaAP1xU622X/2Hx+YPx8oBbSa9o7EcswEARAAARAAARCYIAI1OUSUGYpEt01OTaIHjTOJHiRH//wlx+wpe4oP4AODfCAGsbb1CcZjpgIBEOg4AmeffXbvYOeqq67q+EowHwRAYBACbfMJSPT9JKyDElb68RF8AB+YJR9oG+ii/KAgSj8IzBoCmzZtSh/84AeTCZ0OGnTp/u///u/Tnj17Zs3kubHHmNeQaMl4b2J56KGHpnPOOSfV6Jgb4FgICHQQgZgr1NQh0ZDofT/yNktJMrZA2vABfKDkAzXBrSTTwbiOyQuMgEiySJhImUqROl8mapCz8TnIUkh0vk9HH330PnJ96aWXjs/YGdIsnzzllFP44GCG9gRTBiNQyhtK7ZBoSDQkGh/AB/CBTvlAKaDVtA8Oo0iAwGwgcN555/XIl0hYE/nSCbROqPXvPnmNB4GlkGiNyV8ilf4wRE8WzPtLfqkPefiAZ953er7WV5NDRJmJkujSqQLtnDjhA/gAPoAP1PpADGJt6/MV8lnNvCLwhS98oUdCdJrH49rT2+VRkWitwMRS5by/vFZI9Lzv9Hytr20+AYnmBKpTJ1C1STZyEDJ8YH59oG2gi/LzFfJZzbwi4EeAl3Jq6RNqEXA/8i19Otlu0heJosi7x+nk9F3vetc+Eu9HdK1T3/PNT8FNnlSqTzJR3vOrjH2aU3Pnr9JamohonFv6tV6f/mr9Tfo9n8Z63bLXa4vYWLZUCh+NbTqJ1hj3R9ujftnnfddj/H6VMJj0fsqOiKmw1b3a/fIeeM9jCaE2SpSzikDMFWrqkGhINCQaH8AH8IFO+UBNcCvJzGrwxi4QMAIiUyIfIihtXyI0JoMqRYIjQRTxyYmviZxkTZxdlx0ilLZJ9VxfE4ky2VIpeZNDlZpf88g+9UUynRMt2xbXYl2yMb6kS/ba9ib9OZGOeEmvxupSXTZ6rtyuOK/rJsklEm0MZadfXp8e19d8Jp2WifZFDFSXrMZMYj+FiebMMZINarcPCAPZ7nV5/9XmD1C8dkoQmDUESnlDqR0STfLcqeSZ08X5PV1kb9nbWh8oBbSa9lkL2tgDAjkCIhwiJznhy+Wa7k1e4kmm5UTUpFdEKL48JidkIkYmdipznSa/sd22a578e9xxHo2NL+nQmLxd5C0nsLLL5DYSszh3tEnzWL8IX3x5TNMHFmqTTbpyG6IO1weRaK8/6nKb1qP5TEat0/35etQ/6f1swsg+IBzjy7jGtcZ+6iAwiwjU5BBRBhINiYZE4wP4AD7QKR+IQaxtfRYDNzaBQETAxKktARlE4jSHiWEk6J5PhDV/qU0kMiefkvPJaiRXJk/95KUvJ4u6V3tO8HN7fO95IkZua5pb40y8rUNz6sMBXbk9lvGYOI/78rKEv9pNNoV1fBn7vF0yJX1x/KT2s7QvpX3zXtTgFtdDHQSmiUDbfAISTfLcqeS59qQKOU418YH59YG2gS7KTzNAMzcI1CBgYtWWgJi4RIKcz2fiK1m/+s1nnVHe45pIXlt561IpEq0rf+m0Waeu0i1bRZItGzHqN7d05uu0/U0fHtiGfIzbm0rrs215KSKdk3Xrz0/tpd/rmYX9rMEoYmLb4/7EfuogMIsIxFyhpg6JhkRDovEBfAAf6JQP1AS3kswsBm5sAoGIgE8X2xIQE7J+40z04mPT/caZDKnMX9al8X61lfc4lSadsc361KcTY80lfJpstmyTrdKZj/Ej3iX5pjHRtrxuPGyn5tMl/fn3lj02t8ntKvv1Wc5zTmM/bUOTnd4L2ccLBLqCQClvKLVDokmeO5U8c7o4v6eL7C17W+sDpYBW096VYI6di4uAyV2/078mdJrITC43TdLluWVn0ysn0T4118lzTkKbSJrbVDa9cnwGyUtHPqZJr9sGrc9yseynv1+fdXjOWSDRTd9Pl328QKArCNTkEFEGEg2JhkTjA/gAPtApH4hBrG29K8EcOxcXAZEREUp9DzV//LcfKv7+8iw8/ttEZE34RA6bXjmJFjFUW06gNdZrjSRtECnOSalJepOtti8f4/amctD6msb00+81zup+ej3+3rjvVXov4v7EfuogMIsItM0nINEkz51KnmtPqpDjVBMfmF8faBvoovwsBm5sAoEcAT/SrbL2ZVIYTyXzsdYbiWk/Imcy1EQ0m0hjW/loX06ibVfTBwkmbpGk9Ztb81ifx8QPK6IdrvtHs2SXx7ivqWzCo0kutuU2xb5Z2k/Z2fTymnOf817U4NaklzYQmAYCMVeoqUOiIdGQaHwAH8AHOuUDNcGtJDONwMycINAWARE4E0URmEh6rUsyIiuxzz+61e9fIuWEqB+RMxlSmb9MoKK+tvJRZ06iTfjztfiENie3/ebWPE3rdFv+YYWwNZb5PNHmWG/CI/Y31T1/iWzahhwD6fK/uIr4q72fzn4YNdlveWGQ//hZxCi33+Oa7G7CgTYQmAUESnlDqR0STfLcqeSZ08X5PV1kb9nbWh8oBbSa9lkI1NgAAjUIRJIiEiNSLYKky+QqJ3gi1PphK8uLcIrQWF6l9MbXOEiX5sxfTSQtyshmXX5ZXm066fQ6tD4T7EjeTNya5pbOpnVGvISNxgozYa37pjG2Ly9tr8bUvgbpj/bJpmntp/AX7sZI+NvPZFP+kt3aN8moX/Jxr3J57kFgFhCoySGiDCQaEg2JxgfwAXygUz4Qg1jb+iwEamwAgTYI6ATQJMZEU4SqRExEkkUGJWN5k5+cQMuOfkSuHzFtIo1t5SMOtjW26ZFm2e4+4SCC5nkiMXObyqZXaZ16rDuSQuEmHcKqNKZJfxMeTXKxrUb/rOyncLe92g/tS7/va8tv7YMqNZ4XCMwyAm3zCUg0yXOnkufakyrkONXEB+bXB9oGuig/ywEc20AABEBglhAY9MHELNmKLSAwLAIxV6ipQ6Ih0ZBofAAfwAc65QM1wa0kM2yQZTwIgAAILAoCkOhF2WnWKQRKeUOpHRJN8typ5JnTxfk9XWRv2dtaHygFtJp2UgUQAAEQAIE6BCDRdTghNR8I1OQQUQYSDYmGROMD+AA+0CkfiEGsbX0+Qj2rAAEQAIHxIwCJHj/GzDA7CLTNJyDRJM+dSp5rT6qQ41QTH5hfH2gb6KL87IRrLAEBEACB2UYAEj3b+4N1o0Ug5go1dUg0JBoSjQ/gA/hAp3ygJriVZEYbctEGAiAAAiAAAiAwDwiU8oZSOySa5LlTyTOni/N7usjesre1PlAKaDXt8xDoWQMIgAAIgAAIgMBoEajJIaIMJBoSDYnGB/ABfKBTPhCDWNv6aEMu2kAABEAABEAABOYBgbb5BCSa5LlTyXPtSRVynGriA/PrA20DXZSfh0DPGkAABEAABEAABEaLQMwVauqQaEg0JBofwAfwgU75QE1wK8mMNuSiDQRAAARAAARAYB4QKOUNpfahSPSOHTvSqK5du3Z1KonjlGt+T7nYW/YWH5htHygFtJr2eQj0rAEEQAAEQAAEQGC0CNTkEFFmKBJ9zfXr0uVf+mr6/BevTJ/9wr+lT33uy+mTn74ifeyyy9Oln/h8+sjHP5f++WOfSf/00U/vu3T/kY99Jn3issvTJz91efrXT3+xd61Zuw4SzWkYPoAP4AP4wEAfiEGsbX20IRdtIAACIAACIAAC84BA23xiKBL9R6svSO9///vTa17zmnTaaaelk08+Oa1cuTIdf/zxacWKFemYY45JRx99dDrqqKPSkUcemZ7whCekww8/PD32sY9Nhx12WDr44IPTgQcemA444ID0nTVrByZOnA71Px1atWpVWrZs2dzjeMUVV/TWeckll8z9Wrvg88uXL0+rV69mLyC/E/OBtoEuys9DoGcNIAACIAACIAACo0Ug5go19aFI9Gtff34688wz0+mnnz48if7O5Ei0SZgIpy6Rz35kxXIuB5G3qH/NmjWNutUufRdffHFjfz97NL/G5ronSaLjGo1LXopc9VvHUvs896B9aKPfOvM1DPKNNnPMq2wNiba/5/jqfh5w0ft4XtbShf2oCW4lmdGGXLSBAAiAAAiAAAjMAwKlvKHUPhSJ/oNz3zgyEr123U0TSaZNQCMBEwloInxNsiJbcWxTwhkJWYmEmVQshUQ7Yc9JdJMtk2qbpE3Gd9A+1K5dey8ClOOpeUr7V6t7EeTakOh8z/zBj7DuMlY6iYdE939SZpT7WwpoNe3zEOhZAwiAAAiAAAiAwGgRqMkhosxESfQRRxyRDj300HTQQQf1HuN+1KMelXTpce4NGzZMJIluSvhNyvJEXklxnvTXJILW58S6SQckeukJt/FtwrVmf6KM/AGivPS9EJZN76mIser296Y9m4c98Hs9Xzf3w/lWCb8YxNrWRxty0QYCIAACIAACIDAPCLTNJ4Yi0ee87k8bT6KPPfbYHjkWCa29rru++bHnUhKVt/skND/ZdbuTd9mTyzQl+JJRcp/PU3NvkqfSJ235OM+Z22L5iJvHekzsi+uJibzWqz6v2zpUNvW5zbrbEkvjLBvjXKobD+su2RVti7IaH3VaX742r99jB63BNkfdg+pNe5DvoXTIBtmT4+q15Pucz2ti6bV6TV5zvtYm3KXD41Tm/uy1yP7cTs/TZFfUKfukV/bksvHeczXp1dhom+rCJ9oU1+d9i3bEfs3rsbIvYu15bI915PYbd+nJ54uylrMel03rjHhQH45ctw10UX4eAj1rAAEQAAEQAAEQGC0CMVeoqQ9Fov/LH+5Pog855JD9knYnlDXlV6+6pm8SXpN0OlmOspo7kpymhN+JsEqPlVwc5/aaMupzsi7b4li3xzk0LibokpcdTvw93kl9Thw0Vuu1nOq5PvXJlqjT46I+9ec2W29TOcimiK3xiWu3XbI52mEyFEmJx8e2fE3W12Sr20r4uD8vvcY4r/cxx1m6c/2yUW3CNq5d93E/NK/uJRv3wPukvjif9UZ7ZWOcQ325Ptue2+l1xj1rGu+2fHy0w3XPFbFzn9YS16+6rrh2y6pd8/leZZO9mkdyurwO22Adutd4+1PEy22SjVi7PbZJh+5zu6KN1IcjzTl+NcGtJDPakIs2EAABEAABEACBeUCglDeU2kdCop2UOmldSjkKEu0k2clwnpwrEXMSHJN52RsTduuRjJNjrymOyxM733sOlWpzQh/Heg7b6rF56bHWpX6TBpMAj7GtpXu3ay2eN7fVMqV29+dlk03WEdftcbl80zotm68r12ssm+axjrxsO8byxi3qa7JdGOt9EeVsd/Q19TeN93sqjrcNJb2D1p9jXtKnOTWHcPf8+R643WuKsu6LpedqslFYxfFeu8ZEHbn9sU+YRlyMab5fXkduRz7e68r3SnNad7TPeqNN1EdLnCOepYBW0z4PgZ41gAAIgAAIgAAIjBaBmhwiygxFon/vj96QHvawh+078THRXEo5ChKtJCsm2rJDyXBMvlR3gmw780TZCb/6YxLu5Dm25bqj/ji35pA+y3uOWl0x6Y9rtD6VeSLvdcaxXoMJgMZE8hH15euPfXm9HMRXoQAAIABJREFUyabcnjgmX39OYqJsvo78XrKyNd/HqCOvW4fKvK/pvml9UU7za71uy+/Vnq/ZsrYl7pP2pGk9bfRav0vvvddcskfymjvO3zSv9crWuHa3x9JzxTWqX2Nz/yutvdQuPfna8nvbUtrH3Feb9sQ6mtaSj7cs5XiIdAxibeujDbloAwEQmDUE9Pf7T/7kT9LGjRtnzTTsAQEQmGEE2uYTQ5Lo80ZCoJWgj4pEK2lVsl1K+kUM1BeT2zyxdpLcRAxqkmUn4CYrmivX6XvNHW1R3XPITl+RfOT2erzH+V6lsIjryMmR8fA8edlkX9TvepNN+VyWdam5bFtup2VU5lgZ34iJSVPUGXXkdeuIe5TLxHvZKRtjW6yrT+t1W5Md+Tosa1vienJ9lm2jV2Oa9tdrLtnjcV6v5aJ9tkel5LyPsT3WrUP2x6tpXL+1l/wxx9D+4LXaliY/VZ/skF2Wy/W53aVkoy35eMtRQqJnOF/ANBCYSwT+8i//Mv3N3/xN+shHPjKX62NRIAAC40FgoiT69//rm/ZLiGNy3LY+ShJt4pAn6E6sldDnyW0kfE74m0hDPx3W6QQ8T+A9VqXniIm4E/xIxqwr2mK5fB1NibxlZZvnjLrium3/UkrPE20apDsSkX5ELLe7CRPbbAyibvflZY2Mx0ivSaXbYpnbL925/3kdwiqObVpPPyJZo9c4RFn7n/2yZI9s0955vZaLfhPtz9ce+1wfpMNyKvutPcfO44yh15av1XJNfqo+42U56yutOfedfLz1UEKixxPq0QoCINCEgE6fRaJ3797dO41ukqENBEAABJoQmCyJPvf8mSPRTp5dOqlWMusEuimxzfvyJNljrFekwG156QQ8zm0ZkRPp1n2cwyQjJwnWFZN525rb0JTIW6/Ge5xtUdk0JvbX1q072iTdJmK5nmiX+voRbmNgPH0fMcn1R5zzPt9Houi2Uun1lfrjXkpG91p/lPeapSu2N62nH5EcpLdJn+az7xrHkj2SzbHJ1xftb1pr7Ffdc/XbM48prV3t+do9xmvTPGrzvddqOe+j5dwuvVqH70sYqr+pLx9vPZSQ6KZATRsIgMB4ENDps/5G6yUy7bpnM7kW2dZptR771iXZ+NK4SMYtl+uLY6iDAAh0G4GFJtFO1E1SciLgxDpPoJXo5rJKitWWJ8FqLxFDy+qPrBJylW5zaRuddNtWt+ckw0l/bC+twzo9l0utw+tR6XaV1hX1x/7auu2M2BqHJt2Wt37b0YSZbI6Y99Ob64v2uM+lMc8xcX8sLev9in22Pc7VRCxLOprWUyKSNXqtL8dS64x+WbJHa8vfD/m91++1D8LQczX5gnW5LK3dPhNx9hjZp8v3tivHoKTD2Hi8MWxaVy6rMdbr8ZTjIc/GtW2gi/LdDvFYDwIg0A+B+F1o/R3PybFJdJSTPsmJVPulsTm5FvFW27XXXmsxShAAgTlCIOYKNfWhvhP9+zN2Ep0n+k6EI/FRgh4JWUyA8wQ/JyylxNyJnUvPq9JtsbQe6Y+26T4SAetRe7TN7bFN+puSe7VLTmuWniabNGdTX45TXENeN4nICY5tivOW7LcdUYex6jde8jnZka6IZW6v721L01rVF3V4jRF3zS3s4j5Kt9pym0qytiHqlT1xbttbo9fzxPmNY9xny+W2ay7NHTGxjVGn2yQX221rLD1XXGPsj/XS2iWjPq0hyntfNIfbvV7Z6DaVTbJql/1Rr9emtoiP9ebrcHs+X5x7Huof/vCH05VXXrkfptNYV01wK8nMUbxnKSAAAgEBkdtImk2Y4w+MuS0nwibI6tdLf8tFmPOXTroj2c77uQcBEOguAqW8odQ+NyTaSXCexLo9Jr1uU4LsKybgMSl0v8uSXBzjBDy3JcqIpEhnTNBNNDyXZKwr2i89JgNRh9cV53FdcpEUud2lx3pulfmclm0qbU8TPiYYUXeTnPRaT5TN58sxyXHTWK0nH9fv3vsR51Vd7XGc545yTfvcZIPtjHsu3dYZ8S4RyVq91mk7hYf3wfaW7JFNWnfuL5a3TpWSldwgvD02rjHiGuultVsm99XcTsnla/VY+5fscZtK63Sb8ZOe3DeMn2VdWodwqVmnx3WlFIE+99xze9e0iXQpoNW0dze8YzkIgEA/BERu9fc5vtQWf2DMJDoSa8vH02npiYTcMjlRdzslCIBA9xGoySGizFAk+ls3rE+jur7ytav2S2q7klhi53gf2wRf8J2GD0QSPY35Z3FOEWeTaJXTJNIxiLWtdz/MswIQAIEcAZ8kiwg3XZaHRBsJShAAgRyBtvnEUCR6FhM9bIJ04QP4wLA+AIlu9qFZIdJtA12Uz4Mm9yAAAt1HoN9j1iLVfnzbJNr3XrlJuO8VAzQuf2meeLKd93MPAiDQXQRirlBTh0Tf35wsDpuEMx5c8YHu+gAkurx3s0Cka4JbSaa74R3LQQAESghEopzLRIJtEp0TZN1HcmwSHdtEvCXX9Ch4Pif3IAAC3UOglDeU2iHRkGgeo8cH8IHMByDRZRKtD4emTaRLAa2mvXthHYtBAAT6IWDCK4Lc9PIps0qTaLeJFOuSjvjSvb4TbeJsudIccSx1EACBbiJQk0NEGUh0ljxzetg/eQYf8MEH8IFpE+kYxNrWuxnasRoEQGAUCEQS3U+fSXQ/GfpAAATmC4G2+QQkGhLNKSQ+gA/gA0vygfiL3fqxsU2bNi1JT9sPZtoGuig/XyGf1YAACLRBABLdBi1kQWCxEIi5Qk0dEk3yPJGkt22SjDynnfjAbPvANB/prgluJZnFSglYLQiAQEQAEh3RoA4CIBARKOUNpXZINCQaEo0P4AP4QCsfmCaB1ocrpYBW0x4DJnUQAIHFQgASvVj7zWpBoA0CNTlElIFEkzy3Sp45HZzt00H2h/0Ztw9Mm0BDotukBMiCAAiAAAiAAAjUIBAJck0dEg2JhkTjA/gAPlDlA7NAoCHRNakAMiAAAiAAAiAAAm0QqCHOUQYSTfJclTyP+3QL/Zyg4gOz7QOzQqAh0W1SAmRBAARAAARAAARqEIgEuaY+lyR61apVadmyZb1L/6aA5Hy2k3P2h/3BB2bfB+IvcYtQT3PPaoJbSaYmkCIDAiAAAiAAAiCwWAiU8oZS+9yR6NWrV/fI87gTPJFzEXXN128u27NmzZp9cpHkm+yrrZ8e9UmH5V2WPiS45JJL9pMdZKf0L1++PNXqq7F30Hron33ixB6xR9EHRKSnTaBlTymg1bQvVkrAakEABEAABEAABGoQqMkhoszckWgRwRrCGBPDpdZNhvuNj0TbJDi3T+2DSKlJu8ix57v44ot7RDm2qc/tkbjLjtIckXA3keimDwKEc0mf7aOEgOED+MA4fCAGsbb1mkCKDAiAAAiAAAiAwGIh0DafgEQP8Z1ok8+cxDppdL+JqcioyKf725TSEUmxx4rIRp0m6rlNuS0a7zafaqu0rdave7Xn+krzeBwl5AkfwAfG5QNtA12UX6yUgNWCAAiAAAiAAAjUIBBzhZr63JBon75GQhjJpZI5Ec5+/ZKJp66WzQlkTAwlk58suz8nuLrX5f5RlDkxNw5NumWr+t1nEq1713MS3U+f1lJau+eghEjhA/jAqH2gJriVZGoCKTIgAAIgAAIgAAKLhUApbyi1zw2JdpIm4pwTO5+a5gRW9yKWHqtSY9WWE/AoE+uWj22qe85IWk1Ic6Kaj21zr/mjrfl91KX15hi4f6kkOs5tXZSQJnwAHxinD5QCWk37YqUErBYEQAAEQAAEQKAGgZocIsosBIkWcSyRvfwk2aS43+lzTA5LjzubMItMR3kT95I9UXZQvYmo9yPK/fpKJNrrayL+WsMo1jFonfRDyPABfCD6QAxibes1gRQZEAABEAABEACBxUKgbT4x9yS6iWjGZMyk2W35vdv7lSKSIqhRpqnN/SambU68PTaWTeP7EeV+fSUSrfk0TnPFDwTUBomG2ER/pI4/TMoH2ga6KL9YKQGrBQEQAAEQAAEQqEEg5go19bkn0SasTSepSvjyE+OlkOhch+ccdJptORHUkn1NSanHNZ0C9yPK/fr6kWjZYFxkqy7Jq006m2ykDUKFD+AD4/KBmuBWkqkJpMiAAAiAAAiAAAgsFgKlvKHUDon++b+JcrJnsuj7mjI/7W6rQ0RUxLRmLutW2STfjyirrzRuEIkuzVXS1yRPG6QKH8AHRuEDpYBW075YKQGrBQEQAAEQAAEQqEGgJoeIMnNPok1wS6fCIoHxRFf3tYQ2JoMiqNaj8W3IZS2BNdnud2rtU/Fom+uyS/2+j2WtDR5jXPvZYllKiBM+gA+M0gdiEGtbrwmkyIAACIAACIAACCwWAm3zibkn0UrcIsHNE7mcWC6VRJuEmsQ2kcsSkffY+J3j3E7LNOmNsurXmnI5jy/N4f58XNQd6/mHD7GPOoQJH8AHxukDbQNdlF+slIDVggAIgAAIgAAI1CAQc4Wa+kKQaJ+aikzHxK6JXC+VREuvyKsun0jHuVT3SXJst22DTq41Nrc/6on1pjXkHxZEedX7kejcNusvEfJcN/cQKnwAHxilD9QEt5JMTSBFBgRAAARAAARAYLEQKOUNpfaFINFO3kRuTXRV5uRQciaIHtOm9NjSI9PSZSId7ag5/W0aF3Xkc/pE3DIiyf3W0o9E53OXPiTop58+SBQ+gA+MygdKAa2mfbFSAlYLAiAAAiAAAiBQg0BNDhFl5o5EjypJQw8JPz6AD+ADs+kDMYi1rdcEUmRAAARAAARAAAQWC4G2+QQk+v7ZTBJJ3tkXfAAfwAeafaBtoIvyi5USsFoQAAEQAAEQAIEaBGKuUFOHREOi+z7mTRLfnMSDC7jgA9PzgZrgVpKpCaTIgAAIgAAIgAAILBYCpbyh1A6JhkRDovEBfAAf6JQPlAJaTftipQSsFgRAAARAAARAoAaBmhwiykCiSZ47lTxz+je90z+wB/tZ8YEYxNrWawIpMiAAAiAAAiAAAouFQNt8AhINiYZE4wP4AD7QKR9oG+ii/GKlBKwWBEAABEAABECgBoGYK9TUIdEkz51KnmflJAw7OJXFB6bnAzXBrSRTE0iRAQEQAAEQAAEQWCwESnlDqR0SDYmGROMD+AA+0CkfKAW0mvbFSglYLQiAAAiAAAiAQA0CNTlElIFEkzx3Knnm9G96p39gD/az4gMxiLWt1wRSZEAABEAABEAABBYLgbb5BCQaEg2JxgfwAXygUz7QNtBF+cVKCVgtCIAACIAACIBADQIxV6ipQ6JJnjuVPM/KSRh2cCqLD0zPB2qCW0mmJpAiAwIgAAIgAAIgsFgIlPKGUjskGhINicYH8AF8oFM+UApoNe2LlRKwWhAAARAAARAAgRoEanKIKAOJJnnuVPLM6d/0Tv/AHuxnxQdiEGtbrwmkyIAACIAACIAACCwWAm3zCUg0JBoSjQ/gA/hAp3ygbaCL8ouVErBaEAABEAABEACBGgRirlBTh0STPHcqeZ6VkzDs4FQWH5ieD9QEt5JMTSBFBgRAAARAAARAYLEQKOUNpXZINCQaEo0P4AP4QKd8oBTQatoXKyVgtSAAAiAAAiAAAjUI1OQQUQYSTfLcqeSZ07/pnf6BPdjPig/EINa2XhNIkQEBEAABEAABEFgsBNrmE5BoSDQkGh/AB/CBTvlA20AX5RcrJWC1IAACIAACIAACNQjEXKGmDokmee5U8jwrJ2HYwaksPjA9H6gJbiWZmkCKDAiAAAiAAAiAwGIhUMobSu2QaEg0JBofwAfwgU75QCmg1bQvVkrAakEABEAABEAABGoQqMkhogwkmuS5U8kzp3/TO/0De7CfFR+IQaxt/YEHHkhcYIAP4AP4AD6AD+AD0Qfa5hOQaEg0JBofwAfwgU75QNtAF+UVMHX/k5/8hAsM8AF8AB/AB/CBBfcB5QTODWK+MKgOiSZ57lTyPCsnYdjBqSw+MD0fGBTY+vXHT52pcwqBD+AD+AA+gA/gA/KBfrlDUx8kGhINicYH8AF8oFM+0BTMattqvheFDAiAAAiAAAiAwGIhUJtHWA4STfLcqeSZ07/pnf6BPdjPig84gC2lXKyUgNWCAAiAAAiAAAjUINA2p4BEQ6Ih0fgAPoAPdMoH2ga6KF8TSJEBARAAARAAARBYLARirlBTh0STPHcqeZ6VkzDs4FQWH5ieD9QEt5LMYqUErBYEQAAEQAAEQKAGgVLeUGqHREOiIdH4AD6AD3TKB0oBraa9JpAiAwIgAAIgAAIgsFgI1OQQUQYSTfLcqeSZ07/pnf6BPdjPig/EINa2vlgpAasFARAAARAAARCoQaBtPjEUid6xY0ca1bVr1y7IHIQeH8AH8AF8YKAPtA10Ub4mkCIDAiAAAiAAAiCwWAjEXKGmPhSJvub6denyL301ff6LV6bPfuHf0qc+9+X0yU9fkT522eXp0k98Pn3k459L//yxz6R/+uin9126/8jHPpM+cdnl6ZOfujz966e/2LvWrF03MHGalVMQ7OBEDh/AB/CB6flATXArySxWSsBqQQAEQAAEQAAEahAo5Q2l9qFI9B+tviC9//3vT695zWvSaaedlk4++eS0cuXKdPzxx6cVK1akY445Jh199NHpqKOOSkceeWR6whOekA4//PD02Mc+Nh122GHp4IMPTgceeGA64IAD0nfWrIVEcwI1sz6wfPnytGrVqpm1b5EI3cUXX5yWLVvGXizw34tSQKtprwmkyIAACIAACIAACCwWAjU5RJQZikS/9vXnpzPPPDOdfvrpw5Po70yORF9xxRW9JFyJuK5B5MhyLi+55JKxJPAmB55HxK0fOVq9enXPfq2nn1zel8/j+dSey87SvfCwraWyLRa16xsHiS6tZ82aNTO9D7WYjUvO/jsu/eid3glzLfYxiLWtL1ZKwGpBAARAAARAAARqEGibTwxFov/g3DeOjESvXXfTRIiDCLAIWCTCIjO68gSuSVYkLY7Nxyz1vskGkeSSPhEtE8la4ugxTWsVMZl1Eh2x8FomZbMwG/RhS7SvX90ksMl2zQOJ7k/ijF8/jOnrj2HX8Wkb6KJ8TSBFBgRAAARAAARAYLEQiLlCTX2iJPqII45Ihx56aDrooIN6j3E/6lGPSrr0OPeGDRuKhHGUCZ9ISk5ORUJFSHMympPtUdoRdYkUNBHbKJPXtQaNabI7l9X9pElnkw2jbJv0eoT1KEi0CSBEeekkzxiO0p/QtfT9mAZ2NcGtJLNYKQGrBQEQAAEQAAEQqEGglDeU2oci0ee87k8bT6KPPfbYHjn2SWlNed31wz3C6sRaZUzq3O7TY9mSy5iQWUbjJdOW2MZ5VTfJzQmT2y0vm+Lcbi+VJv0ao7E5+W8aJwJYSwKjfo3RHPlYr0F9Tf22weMtl3+AkevJ98Z68tJ7VpLP9eb2R301spLJdRgnr01lvtdxHtvcZq81PsdQtkS9qgtXza96tMd421fcl9sgHG1/xMNrztfahLt1eA6VuW9Kn+2Pcp4nX1euU+txWy7LfbeI8DD7VQpoNe01gRQZEAABEAABEACBxUKgJoeIMkOR6P/yh/uT6EMOOWS/BD4myYPqX73qmocQg7ZJlslGHKd5Y8KvBN7EwnImCDHhl1wcZ9k2pUlTnM9kxmTL9230ek1NdjfpsVxOnJpk1WZ5YZCPcV9ck8ZIVlfUqftIjrTmOE7riPfSXYu5sc3l29jXRjZfi/dNOrxmrcX76rZYql9rjm396l5jxFDyTX5u3VG/bcz3RphJLtruNrV7DcZH45v05r4hubge22R90faoz+uU/KDx1hnHxzHUF4NIxyDWtr5YKQGrBQEQAAEQAAEQqEGgbT4xEhLtJFuJ7VKvUZBoJ+MmVkq488TexCASANkciYr1SCYm7ZKL42oSdpMTEwnpsH0abxs9p/HL7fZclte91xLJkOViKZul1zbEvqa69UZMLCe7mtptv9dmHSXb2trk+V3m87m91j7JDyMrDJpwsB1NZdsxki/5gfZTvuB57Kc53hrftPf5ePtp7t+yQbJNegetv2mPSvo8v9dj/8ntUb/XZFnKxSDOcZ/bBrooXxNIkQEBEAABEAABEFgsBGKuUFMfikT/3h+9IT3sYQ9bMnFWcu5rFCRaSZaTcSfwefIvGSfonjsnAx6rfpNCjTPxi20xsSvVlfSL5GhcTopMfjRXHN9EFDy/7JOs19G0xqjLmMS2fnXrzQlMqd26hKPXZwwj0bOcSutqi6V1WH8cb5253R4T7Wsjq/FaV/QT75v3wnP0K6WjhEc+rml9Ucbzuy2/d3tcs9tU5uuxj+Traas3zqG6/DquuWRP7tuleaXTtuZzcb84ZLomuJVkFislYLUgAAIgAAIgAAI1CJTyhlL7kCT6vH0k2IR0qeWoSLQSaRGEPHl3gq0kXn2+V+mk3ATCBCYm/5bvl9xbJi9N2DSv6rHf+jy3+2yDSaLvI0G03lyndbj0+nw/qLTeOJfG5EQn1+O1uN3zat1eh/tUWl79+VxRrqluPKLeNva1kdX8OelUm+z21WRj3taGRHsPSntrbO03xjKfs0Ra8/Xk+qynrV7jalxUSof1lezxOK9Xcro8Lpa2NbZRXxwCrb0uBbSa9ppAigwIgAAIgAAIgMBiIVCTQ0SZoUj07//XN+0jETFpXkp9lCRayXeevCvxcqJu4hET75i0m6BJPsoM0pHL+t76ZJNJgvtEMERofB/LSLqa1jOIaFlXrVwun6+/H34aW1qL90NryHVqnNapviZ8bFNeGtO2JNpYt12LxjWROmMr2607t9X3JXzcH0vrVRnbXc+JpHTLBve7lM1NduXrsb78vVGr1/bmNuheOgbZ4/3weuP70WNd2lbfUy4WgdZ+xyDWtr5YKQGrBQEQAAEQAAEQqEGgbT4xHIk+9/x95EfJ8jDXqEi0k3GXTsqVePVLvvM+rUVteYJuvTnZyOXivQiBiEQTocnnjeNEdDTOMoPwjWPzusZGMpP3x3sTIq21qT1iGvv7ER/JaT1NhM46ZKN0+L5f2USibXeNfW1kbXs/2+wXOWZxDZYp2Rdlvb6SPu1lxFL3wi/qUL3J59SusXE99rHcr2v15vpsR+53JXtybPL1WZ/Kkk1Rhvp8E+u2gS7K1wRSZEAABEAABEAABBYLgZgr1NTnikSbeJj85gm7E/WcKCjhzmWVqEeS4aS8X3JvmVhGcpLbJzm35cTK7SUSpbGDiGC0w2vvp8/y1tskWyJLNfYaC8+Tl22w9Xzea+tqY98oZD2vShHG3J7Yr7p8qons5nKWlY1NfflcJWKZ+7V15Wv33ghXy6is1St9ko1j7UexvWSP/dPvg/w+6tXaazGM46jPD7GuCW4lmcVKCVgtCIAACIAACIBADQKlvKHUPlckOk/QncRHYqNkPycmJhA5aVSiHglAv8S+KUFvInomJZGseP7YlpOcJv1en4lHk0xs8zxxTe5Xny7dW2+OR+zLdeT2Sof1eQ7JeJx05/pzYuhxTWUTtm3sayubr0++Fu2yb8Q9jP2xLl1aa9O+qc86vMZ8rtzPpdt+FedRvUlW7fl67Bue23pq9WqenNjqXpf3vJ89xi9iYpxsi+1uao8y1MdHlj/84Q+nK6+8cj/fnwbepYBW014TSJEBARAAARAAARBYLARqcogoMzck2sl+TMKV3Lk9Eja3OclXmZMHJ4ZRpp+c5WMpeSX8sU1164ztJjHui8QjysW61ir5fM1RpqnuOfLSpNd6I2a5ntJYy1lHlLN+yZg0xf5+81mvSxPMqNN9KqNe1UtytbI56TRpjPPE+QfVm9ZvXbkvmjS6v8k37NP5vJMi0Zo3t1NtsjnaW7LHeOS+nOMsOe2l9OZr5X585FnYikCfe+65vWvaRDoGsbb1xUoJWC0IgAAIgAAIgEANAm3ziaFI9LduWJ9GdX3la1eRFN8/3iQYkgG++AA+sFQfEHE2iVY5TSLdNtBF+ZpAigwIgAAIgAAIgMBiIRBzhZr6UCR6qckY40jk8QF8AB/ong/MCpGuCW4lmcVKCVgtCIAACIAACIBADQKlvKHUDole4umvHyf2I7Z5qcdQIQndIwnsGXuGD/T3gVkg0qWAVtNeE0hnTeb1n7w7+Xr3l3fNmnnYAwIgAAIgAAKdR6Amh4gykOglkmgS7f6JNviADz4wvz4wbSIdg1jbehej/El/uyUd8YGNadk7NyTVeYEACIAACIAACIwWgbb5BCQaEs2JOT6AD+ADrX1gmkS6baCL8qMNuZPR9okbH0gHvvfW3gWJngzmzAICIAACILBYCMRcoaYOiSZ5bp08c8I4vyeM7C1728YH4i9268fGNm3aNJG/JzXBrSQzrZRAp8i1lwiziLNeJtAv/8dtvUe6IdHT2kHmBQEQAAEQmGcESnlDqR0SDYmeSNLbJjFHFiKHD8y+D3AS3S6VEIG+4LP3pP9+7X0Dr69t/kFPeSTQalC7yXW72ZEGARAAARAAARDoh0CJLJfaIdGQaEg0PoAP4AOtfGCaBFofsJQCWk17vwA6zj6RaBHo2ldOoGvHIQcCIAACIAACINAegZocIspAokmeWyXPnBDO/gkhe8QejdMHpk2gF4VE/96/3Jn0CLdfG/f8xNWRlpdeemnK/7vEBz/4wZHOgTIQAAEQAAEQmHUEIkGuqUOiIdGQaHwAH8AHqnxgFgj0opDomGyITLc5xY5j+9XPPvvsHoHOZY4++uikixcIgAAIgAAILAoCNcQ5ykCiSZ6rkudxnmyhm5NTfGD2fWBWCPQikui2j4LXJDw6be5HlNXHiXQNksiAAAiAAAjMAwKRINfUIdFzTKLXrFmz7zG95cuXQ5bneK8hobNPQru+R/GXuEWop7memuBWkplWoB+GCA8ztrRePcKtR7lLLz/m7X6Tbv0Ce3z8u4lon3feefvJaIxf1nPVVVffj55WAAAgAElEQVQVZSxLCQIgAAIgAAKTQqCUN5Ta54pEX3HFFfsFZQf6eSGQq1atSrpqk1etf/Xq1dXytXpzOc2huYR/3hfvJZPb7z2K5cUXX9xXj3RKJo7pt8eaM8oOslP9bfRdcsklA+2NOFCH8HbVB0Skp02ghV0poNW0TyoY5/MMQ4SHGZvboXsT4Uhuc7lcRuRXf0fj6bWJcCTjekRcJNqvJjIuPZLzS/JRr9spQQAEQAAEQGBSCNTkEFFmLkl0TpJEiBS0dTLb1eRVdmsdOQktrUcYaM05FiX5Ydp94t2PsItoRnt8nxNQ3Q8i0Sbt0WbvcWxTPcesNK/HmXBrnNtiqTXEPTDO+TriGOqQZnxgtD4Qg1jb+qSCcT7PMER4mLG5Hbo3+W3qc5tJtGT1Mol2v0sRYBNiyTaRYbWZaDfp8Vz9SL3nowQBEAABEACBcSDQNp9YCBKtBFbkpx/J60KSmxPCfjab3E2CRMsOk8+STeqPxFT1pe5HE2E1kY8E3KfVuU25LdF++YmuaKvHN5F39ZXm8TjK0RIo8ATPtoEuyo8j8NboHIYIDzO2yTaT6H6kNSe2fgw71ydybOJsguy/o7FUn15NejyXCXs+B/cgAAIgAAIgMG4EYq5QU18YEi3ipMsJuIK7SJEJkO7dp9KEKSYBsV91jxWBE+myrOcxkXW75KMOn4pKLp8vynoe63FZOlmPtlg26jPhdJ/K2G8b1d4PI8upjGuJ7ap7vjhHac58bJv7XGeJqNvWiJ/2TGvVfKo3keiSPq9vUh9YtMEEWQjnPPpATXAryYw7CJf0iwgPc43617n199Knw002R3Ks/ibyq/YoV5KJ+ptkINERIeogAAIgAALTQKCUN5TaF5pEl0iRkoucRJnkRuIVya3bTZw1XnqcwJq4qczbJBsJpmVjm8ZIzgTdOkql7ciJnW2OdpgEmkRap3HI292fl5JvkvWcxkjjtI6IT65rKffSFzHL763T640YuE/lUkl0nDvqow6RxQdG6wOlgFbTPo3ArDlFgoe5Rv1/ogd9D1mnyyK8fqmuv6n5S3p06SVC3SQTx0CiIxrUQQAEQAAEZgWBmhwiyiwEiTZpiiRHgV5XntyaLOftus9JrMlhTsZMEHMCm483We5HPKMd+fjYl9ebSHQTDh5nW6LNJYw8Ji9L2JXstv6m9ee6B917L0zUvdZ8b6SnX5/6SyRadmotuS3GOvpXLsP9aEkUeC42njGIta3PSrCeBTtElPV3OH+pzd9zdp9JtAmz2k2a42PY0pmPjfeQaCNKCQIgAAIgMEsItM0nFoJEKyEQMYqJt9qayFupXWNzopbfW3+JTObkrIm4WoeJWSS1JTLqMbFsGl+y1+Pytef3liuVnjMS16a2ON42tZ0r6jCO0uX2fkS5X5/G5/uU64y+JF3aF9kf5/cYysUme+z/ePa/baCL8rMUsGfBFpNj/Q3zJXKcv0x+TZwt2/S9apNzy2isX9bje5U8zh3RoA4CIAACIDANBGKuUFOfSxLtwO2yidyoLyfRg8iVyZqJrQmgxsVkeRQkusmWYUm07Go6SbXtuf4mjCxbKnMdJSzy8cZSc+Z9/e6tP9/jJvysp1+fZEok2uPtVy7Vrnr88MCylOMhUeC62LjWBLeSzDQC8zzM2UR+52FdrAEEQAAEQAAEhEApbyi1zyWJNsntl2iL9IiARZlB5MokWnIaZ+Lne+sysfO9y5ycWV+TvU225ATVeptKnwBH3bJrEImOmDRh1DRXbMsxaatD8vGkN+rO65LVFddomSb88r6mcZLJ98njSqXnKukrjaN9sYkg+7/0/S8FtJp2UoWlIQCJXhpujAIBEAABEOgGAjU5RJSBRN+/fyInUpafajrZNUHM78dBopsI9rAkOrff63CZr133kVRbrl9pQqm5mtbQb6z6Sh9AxHGeo98HApJXf5P9tivfN8/RlkRrrYNssW7K/d9v4AEeS/GBGMTa1rsRymfPSkj07O0JFoEACIAACIwOgbb5BCQ6I9H9SFxOykxKczJW0pGTM5M56ckTyVxW/WrTlcs23etUND+lNflsms+2xLUshURHO5vWYFs1n+uxFHaDCGk/vTW6BuFYq99z5R8+uJ0SgogPjMcH2ga6KD+6cLtYmiDRi7XfrBYEQAAEFg2BmCvU1CHRGYlW0itSlBO5JmI8KhKt+SKptN788eAmG0pJehOJlqx1x/lK5HqpJNqEvB+5VJ/IarTf46JtsV9129pPJo7J1+A54ocFUV71EonWmPwDiKZ15Pq4Hw+RAtfFxbUmuJVkFi0pYL0gAAIgAAIgAAKDESjlDaV2SHQDiTaREkHylRM+yZiQ5oSsRHZzcmZCJ8Ir0u65VOY6TRiiXElGsiUSHfvifDlhl5z6tRbP3aa07n42WiaWg+aQvijfVM/njJhJftAc+T5ZvmnunFRblnJxCR57P/69LwW0mvbBYRQJEAABEAABEACBRUOgJoeIMnNForuWvEYS3TXbsXf8RAGMwRgfaPaBGMTa1hctKWC9IAACIAACIAACgxFom09Aogsn0ZNIXiHRzQnyJLBnDrDHB7rrA20DXZQfHEaRmDUE9j756amr16xhiT0gAAIgAALNCMRcoaYOiYZED3y8GbLRXbLB3rF38+gDNcGtJNMcOmkdBwJdJb6zZvc49gadIAACIAAC+yNQyhtK7ZBoSDQkeoo+MI8EhzVB3MftA6WAVtO+f8jkrg0Cs0Yusaf5hL7NniILAiAAAiDwIAI1OUSUgURDoCDR+AA+gA90ygdiEGtbJ1loRgBC2kxI5xWXZi+gFQRAAAQWF4G2+QQkmuS5U8nzuE+40M8pKj4w+z7QNtBF+UVND+aVDLKu8ZD/RX2fsG4QAIHFRSDmCjV1SDQkGhKND+AD+ECnfKAmuJVk5jk9mEdC2fX9Yk+6voPYDwIgsCgIlPKGUjskmuS5U8kzp4Szf0rIHrFH4/aBUkCraZ+XZGDWydm84Dwr62C/Z2UnsAMEQGBeEajJIaIMJBoSDYnGB/ABfKBTPhCDWNt6F4P/rBCoLmK3iDbjL4u466wZBEBgWATa5hOQaJLnTiXP4z7hQj+nqPjA7PtA20AX5YcNsuMePy0CNO51oX+2EMDPZms/sAYEQGD6CMRcoaYOiYZEQ6LxAXwAH+iUD9QEt5LM9MP0/hZMkszsPzN3IFBGYFJ+WbaAHhAAARCYLAKlvKHUDokmee5U8swp4eyfErJH7NG4faAU0GraJxuSHzrbuMnJQ2ekBQRGhwD+Ozos0QQCIDBbCNTkEFEGEg2JhkTjA/gAPtApH4hBrG19GiF7HMRjGutgThAoIYCPl5ChHQRAoCsItM0nINEkz51Knsd9woV+TlHxgdn3gbaBLspPKpiPklRMymbmAYFRIsB7YJRoogsEQGDcCMRcoaYOiYZEQ6LxAXwAH+iUD9QEt5LMOIPwqEjDOG1ENwhMCwHeH9NCnnlBAARqECjlDaV2SDTJc6eSZ04JZ/+UkD1ij8btA6WAVtNeE0jbygxLDtrOhzwIzAMCvG/mYRdZAwjMDwI1OUSUgURDoiHR+AA+gA90ygdiEGtbH2W4XyoJGKUN6AKBeUGA99O87CTrAIFuItA2n4BEkzx3Knke9wkX+jlFxQdm3wfaBrooP4rQvpRk//WfvDsNe/33a+8bhfnoAIGZR2Ap77GZXxQGggAIzDQCMVeoqUOiIdGQaHwAH8AHOuUDNcGtJDNMBG+b2Me5lr1zQ3r6/74pnfS3W5Z0HfjeW3skPOqkDgKLgMAw77tFwIc1ggAIjAaBUt5QaodEkzx3KnnmlHD2TwnZI/Zo3D5QCmg17UsNtbWJfEm/SPQwJ8ki3zrJ5gUCi4zAsO/DRcaOtYMACPRHoCaHiDKQaEg0JBofwAfwgU75QAxibev9Q2hzb03i3jzyF62Q6F9gQQ0EhkVgFO/JYW1gPAiAwHwh0DafgESTPHcqeR73CRf6OUXFB2bfB9oGuijfNuQPStZr9Q1Lojfu+Un6xI0P1E6HHAgsBAKjen8uBFgsEgRAoC8CMVeoqUOiIdGQaHwAH8AHOuUDNcGtJNM3gmad/RL0THTgbVsSLdJ8wWfv6T3C/e4v7xqoH4GlIXDeeeclXcO+pOPoo49upeaDH/xgWrZsWasxCDcjMMr3avMMtIIACMw7AqW8odQOiSZ57lTyzCnh7J8Sskfs0bh9oBTQatprk4BRJ+WDSLRIs74z/b/9+970e/9yZ9IPiR3xgY29HyFzXd+Jlsww3632+k3gROLi5f5FKSHR87PTo37Pzg8yrAQEQKAGgZocIspAoiHRkGh8AB/ABzrlAzGIta3XBFLJlBLy2vG53CASLWIsGV36EbF4+iyCLQKtX/e2TK6/7b1I9Nlnn73fMBHKRTsZHRWJ3g/IMdxcddVVI90bnZpfeumlY7B0uipH/b6d7mqYHQRAYJIItM0nINEkz51Knsd9woV+TlHxgdn3gbaBLsrXBORxJOK1JHqQfSbbg+QG9TeRaI0RiRZhW5QXJHr+dnoc79/5Q4kVgQAI5AjEXKGmDomGREOi8QF8AB/olA/UBLeSTB40m+6bkvAmuTZtItGl/xOtU+daclwrN8i2JhK9adOmHolWqVd+b506wdZ4v3SqqXufZIuI56fclo2lxsRHyTU+vnz6apm8P8qqbjmXXkeUc59KE+ioV3a73bJeq/ryNuv2uPw+rjH/zrTmyXGyfpWWl1xsV11rMz4u1e5Xk7z6oqxlvD71R3vVn9vn8S7jnJ57FspxvIdnYV3YAAIgMD4ESnlDqR0STfLcqeSZU8LZPyVkj9ijcftAKaDVtNeE33Ek4Hocu3SJGNeS41q5QesUWcoJUk4E25Bokan4eLDuIzlrsiefP+rw3CJrfvXTp7nj/JI1CfX43CbJqy0n0dEOk0Xpsi1u873059jpPp9POuJcOYlWf1xjrHtOr0Wl2/J11mChMREv6TNZj3NoHVF/ac44Zhbq43gPz8K6sAEEQGB8CNTkEFEGEg2JhkTjA/gAPtApH4hBrG29JvxOIwHXv6/SafXXNv+gr4n64TH90NiwLxE0kbx4RVIo/SayKuNLxCoSPJGsSA4lq37JtXlJh/WYrLUZH2Vz22VPJIOWlY2eU226z+3WuKa2SEJr9Eg+2qB5o17tRb4HtrMJD7eVxnhsjoXaZUe03zJNuqJdtXN67mmV03gPT2utzAsCIDAaBNrmE0OR6B07dqRRXbt27epUEjfukxb0c5qHD+AD+ECzD7QNdFG+JtQ2JeBqG/dL5Dj+oFjTfC//x23peX9/R1NXq7ac5IrMRUInZSZWKuNLcjmJjveSLZHWqEd1kblI5COhdV9sy8fHe5HCqEt12y6bm/SoLbY3yeXrtd1xzfm4/F5jbJ9t1ryS80v3sjkSbfeZvPpepdu8xtjnuSIeUS4n0ZJvmlc61e619pszzj/N+rTev9NcM3ODAAgMj0DMFWrqQ5Hoa65fly7/0lfT5794ZfrsF/4tfepzX06f/PQV6WOXXZ4u/cTn00c+/rn0zx/7TPqnj35636X7j3zsM+kTl12ePvmpy9O/fvqLvWvN2nWQaE7D8AF8AB/ABwb6QE1wK8nUhtlpJOJ63Fv/1kq/xt308mm1Huke9iVSFAmc9IlwiUz5JdIViajbNc6kSm2RZFlG/SVSJhmTvDhfTmity0Qwzuk+l5orzpfbntvscfmcklNbfDWNzdecj8vvpc9rtm7NI7n8pTatOfaZvEZZt0VyrP5BWFgmYq96xC/OE9damjPKT7M+jfftNNfL3CAAAqNDoJQ3lNqHItF/tPqC9P73vz+95jWvSaeddlo6+eST08qVK9Pxxx+fVqxYkY455pjeH+WjjjoqHXnkkekJT3hCOvzww9NjH/vYdNhhh6WDDz44HXjggemAAw5I31mzdmDiNC+nMqtWrUrLly9fmPXOy76Nch1r1qzpJUmXXHIJftCCNBo3JZi8h5pPaUfpp7OqqxTQatprw20pGVf7uF4iz/7xsXwO9emkWifRo3g1kWi16b3ll4moiFN8RVKl9vxebYNIdE5eNaaJeHrenIC6XaXtjGQyJ3slwirbI2luskFtOYHP15yPy+9lZ76Gkk1xTcbe64nrdltcdw0W0iH7I4luGue55BO5HXFOy027nMZ7dtprZn4QAIHRIVCTQ0SZoUj0a19/fjrzzDPT6aefPjyJ/s7wJPqKK67oJQD6g59fIq6zkhDOE4kWCcyx1v3q1atnBu9Z2fdoh8ngIBJd8ul5IZB6L7R5b07Kt+S/mkv4x33L65KJ9ntf1R6vQfuc6+W+/wcEMYi1rbcJt9NIyvWdaJFlkWmfSOsEWm36/9GjejWRaOluIpUihH6ZaEdSmRNKyapf7aWXCGTsN8E0odV9JHn99JkARnnp1nvQZM+EM9qtuSTjOWVrE/lVWxwnuXzN+bj8XmO8RmOieSWnl+yMdthe2+81msxqTC5jPVpTPywk12Sf8VC/X5KzjWprmtOy0yyn8V6d5nqZGwRAYPQItM0nhiLRf3DuG0dGoteuu6lvslqTVJpwNCW+Ih0KLBdffPHQ89TY0k9mXki08NSVr1WEARLdnwSYbA0iVyWftj9LT45/l+61jkhC+9lewqLfmKX2eX/6+bH2Tv7vvzf62xLvPbfaB+2zZSn7v2+MT9tAF+Xbht1+ybn6xvHyibSIs77/rB8cG9UJtO0VKYzkyO0mepGE+W+9So+LpDInlNKl/kiSrT+WJrrSKwLnSzIma3HuODav227Le7xJaJNOjYlzSqaJXKotrldy+Zrzcfm9xthG1fXS3JLzy7a71BriS/Lu07qa1ih5z2PZJjm3SSauLc6hPt3Hl8dFXGP/pOvTeH9Oeo3MBwIgMBkEYq5QU58oiT7iiCPSoYcemg466KDeY9yPetSjki49zr1hw4ahycCgJNtJ77QT2nkg0Qqu/QiGk13KZlJgkjbIF/v59DzswaySaPmt3qfCuOTD+ftYsrPwIV3J3nlqrwluJZmlhOJBifq4yLS+I60Taf0iNy8QAIFfIDCt9+QvLKAGAiAwbwiU8oZS+1Ak+pzX/WnjSfSxxx7bI8dKKmuv664f/kStH+FwApknvm7345u2NybD/ZLppj63WVdOlEo2mOR7nEqfctlOr1GyPvmyfInUDpLzvNLtE86SLtmhPsnZpprSdttWlTkuJpayN7fZJ662T+ObbFC77POaPJ9xzPcmt902eJz1RTnrlk7NFWVtZ5Rv0um2HIM4TnXjZvtjv9aiy222NWLnPpW5rZKP/ap7rOyLWHse2+M1Sz7q6IdNlPU81uOyCb//v73zebXuqN78i2MHGToN8R/I3FkGwWmghaahO5hJh26cxMF3IEIGgtFBwJEYgjMDtk4cBaHTkQSarwMJNLRIeKOIiIiiNDhwdJvnyvPmeVeqzql9fu1d+34OHHad2quqVn32ulnreevcG82fvtg25zNP39M179tH9YtDru979Zp7qfe8ntfw52PPs87D5/Y/Mh3j0ktoI/2nJv2Rov1aYvpUnxkHgb0R4Odwb0+U/UBgOwRGaoi0OUtE/4f/9LSIfuaZZ54SFFnQHmv/rw/+/ali/FgR1brvAr8lOGzvwjiLdRXoKchcELtA9pg6b7XTGtqnBYc+26csrnU/15Od+jQ2/fK6OdbzabzEgPfl/uzLeW2nq9ZJO6+jOesec5zarT1Xm/pZa2nNnNv+mnHOLdvsl1/q0zVZqC9Zaw716Z37M1uNr/OqL/3VuGN+mpfWSX+8Ts7X2qf76vgc57Zt0yff03q5f82n/eTebet7/qyrn0vGnPjIVm/32wfNrX7PYQ7JwH2VtfuTv+aRXe7Bc7eu9qOysM/ph+O0sjCH2t9aT32yb9l6TTOSrfaid28u+k8TzC1umcSWts9J16MFvO3OWYuxEIDAvwj452n0CjcIQAACpxBYWk9cRESrcFSxec77ViK6FuIuhmuhVvtbxbSFgQtpFdutIrr2SzSkneep4kA+aazWtn/2vyU8PI/9qZ89R+3355ZY8BhfvX7LV9vk1fZaI/vVNmP7q6v2WvfW86+O15wan2zVZx968x7bS+95VV72P/cqX+q6ufe0VX992/fqo9cSA4/R3jNW3F9jyP26Vv/MtPqlPWju6kcd33tWWstzH1o/79V2i0WLg8fZl/S5x8hj6rXHru5b4+yL1sjnUufk82fjfCmTpYku7U9JrHXMaDGfdnUOPkMAAn0C+bMz2u7Pxh0IQAACxwlkrTDSPktEf+U//9e7z33uc/fFtYvTU6+3FtEWCSqGqxhSQVcL9lYxLWGRAqlXPLuYV5GtuTVG67pwrJ/dn37YX/vlz2nrIt73qn+2rXb2L8WGbevVtt5LvV8/t7jZxn5YcNTPtuvt2b6k33oG9Xkundfr+lr30FrXthkDPb9la580l8e2rp4j9yg7rZOx576690P9umdhK39an9Wnd2Xg/hq7h9i09tISo567Xlvjq/91TI2H+rna189eM59Tqy/HmVXGQt6nPb+IdioeLe6rncdzhQAEniZQf1ZGPj89A58gAAEInEZgRDinzZki+tO/FKmC8Zz3rUW0CmEVs8d8tp0LZ3+uIsifD81noVKFR0/Iyz/Pa6FpP7Koz6Jc69tW8x7yx3McEj45t9q29V7q/fq5J+RtJ/8s/OpebdPbs33xM5F9zufxS+f1PJWd52ut63u5vu1arOyTbDy2dfXeqy9+xjkm13b/sXXsoxn2RKmFoef1tcZync92urZ8OVdEyy/Nketku87fYpT2rXado8eijrXdIf/qGD6PCexMYkvbp6XWw6NGCv2ezeGZuQuBfRPo/VyM9O+bDLuDAARuTWBpPXGWiP6P/+W/HRRptfA/9PlWItoiwcWqfGoJEt/Pq4phFcbqq/O0BEKOzXYVHjlv2qld57Wo6omv3M+heXOdQ8In7Vr+1Pv184iINn/v1Z89V2/PLb+1fz8jj18yr5hpjuRrMeT5Wuv6Xq5vO63v+77ap1zH9/LqvVvk5r3azrV979g61UfHdfW5MvD8NZY9X8vfli/irTk836Fri4X80hy9cfVnoMWoN9b9lcmSObznGpOem+uYaK6clia6tL9mUh4p/I/ZXNM/5obA2gSOxf/I/bX3wPoQgMA+CWStMNI+T0S//N+nE9G1qF5SxLuYVkFX51HfaHFdhcchoVmFgz+3xFe9V9ephag/HxI+tsnrEmaHRI4Fhvfiz2uJaD9f+ZH7rQLyEK+MAT8PXXM+tX3Pe6/3/dl2rTls42uu7T5d1V+Z+r73XD8fY2D7GmOH2LTuLYmlFovqv/3yte69x8j2rWvGZWsPrTHZVxnlPdr7EtFZVoyIgVGbnJc2BGYhMBrfI3az7Bk/IQCBeQmMCOe0eVAiuoohFbDuq6KhVdy6mO4V0iqWVaS3xmZfLap789k/CQ2Pt5CQ3+7z1XvxZwuMYwLs0PqeK6/2oSfMWrZaI/vVtn/uN986r9erc7T8bomk0XmrP/ZL/PO5tta1bV2/fradn1Xdk+/76r0fe4ayP7aW58yr9paxZAb158H+5li1e7Fcn2HL1n2ao87b+txi0Xu2Gu/nlHvpMWqtl33y0e/8ebSN1ug9I4+zLdfThHNyyyS2tL1Geh8RCUtt1tgHa0KgR2Bp/I7Y99aiHwIQgMA1CCytJx6EiHahrQI6CzG31V/vqSBOcWFbFcQqonuFtOap91TMp6jwHJ5TV/VpbBb8FgFZnFtIyDbntK2uOa98qfNqDa1nO4/NdXyvd/WYnMe2upfsLMByfu8j/fVzyn1pzpat+u1Dzqu95tqyG53X86VP9l3z5v70Odf1vbq+9qK+nFN9fi7Z7zny6r231ko7tevaeV/3alx6b2lnfzMOdb9lq/4ay2bY2rP66j5686ZPbvdY2Odk2Xvmhxh5ndY196X1qo3X037ynn2r+06bmdpvvfXW3XvvvffUHtfwf2miS/trJN4lc46Ih1NtlviBLQROJXBqfI6MO9UnxkEAAhA4l0DWCiPtXYpoFcr1fayItajJcVVIqFh0Md0qpF1M5hxu+56uVXj4ngtuj9HV93y1kJAfmidte3usdhqTtt5T9nm9Y9cWN81fxYTXSH8rXwuRyjb3nP54zvS7tfaSeesz0BpV6LXWtV+t9W3vvet52Cfd89jW1XvPPbbs1NdaO21rHOhz3lfb+6/PpjLwOM2R4tx7lb81NuqcniPtejayPcTC98xY1xazY4zsU+vquXs+qt82viab1pwz9UlAv/zyy/fvtYX0SHLr2ZybZC89fkRYXMLm0n4z374JXCLmRubYN0V2BwEIzESgVzf0+s8S0f/7V//37lLv//n+B58p6GcqMG/lq8XCMfF1K39Y5/yvpu6JYYroPe2Lvfz9/gTaIlrXNYV0L6GN9G85oY+IjmvYbJkJvl2PwDViaWTO6+2ImSEAAQicTmCkhkibs0Q0heXtBRQi+vbMifNx5ojocVYzxpWE8xaEdCaxpe3T0+s6I0dEyS1s1tk9q55K4BYxMbLGqf4zDgIQgMCtCSytJxDRf5+r6EVEz/W8ZhRK5/iMiN5/fG5BSC9NdGl/66R8jfVGxMvaNtfY90Oec+3nObL+Q34+7B0CEJifQNYKI21ENCKar9FPFgPniNxrj0VE719EK4bWFtIjya1nM3+a7+9gROjMZtPf7Vx3ZuN+yN+5yOMtBCAAgTECvbqh14+IRkAhookBYoAYWBwDawrpXkIb6R9LpfuyOiSIuPfFOxi0Gezrp4DdQAACEDhMYKSGSBtENMXz4uL52qeZzP8wTjN5zvM/5/yL3fpd6cePH9/kvyeZxJa2D6fQh3kXEdkWkXvn8jCjnV1DAAIQaBNYWk8gohHRNyl6EUzzCyaeIc8wY4CT6HYS3mvv3gXl3u1I2pYAACAASURBVPa31zhkXxCAAASuRQARjShGFBMDxAAxcNUYWFNAS8gvTXRpf63ky7xPE9ibKF17P0/T5RMEIAABCFyaQNYKI21Ooim2r1ps58kVbU4yiYH5Y2BtAY2IvnTZsO351hav566/bbp4BwEIQAACJjAinNMGEY2IRkQTA8QAMTAUA1sQ0Ihop3uuEIAABCAAAQhcikAK5JE2Iprieah45gRx/hNEniHP8JwY2IqAnl1Ef/Unf7x79G+/XvT+wrc+vvv4L/+8VJ3APBCAAAQgAAEIFAIjwjltENGIaEQ0MUAMEANHYyD/ErcE9TmC/NyxmcSWtkvOvPlHi+jPf/M3d9/5xV/vfvDLvx19S3TLjhcEIAABCEAAAtchsLSe2J2Ifvvtt+8ePXr01LtXsL3yyitP2Wlsz1b9H3300b19z6bO9/rrrx+crzcP/ZwYEgPEwBZjQEJ6bQEtLksTXdpfJ/WOzyoR/cXvPn7yHjlhRkSP88USAhCAAAQgcAqBrBVG2rsS0RKtEtASuy5AX3jhhc/06Z76n3322Sd277777r1dT/imQPbcedVcOZ8Fd2++HEsbwUQMEAPEwHgMjCS3ns0pifWSYySin//eb++/nm0xfUxII6Iv+QSYCwIQgAAEIPBZAr26ode/KxHdO0mWsJYIdpHq0+oU27pnoWy77MvT7byvdku8q7+3Th3P5/HiGVawIgaIgV5CG+n/bNq8bY9FtFaVeB4R0ojo2z4jVoMABCAAgYdHYKSGSJtdieheca0T4hTROoXWu9r7NFpX39M427ZEtux68+mexHdP3HsNrogCYoAYIAbGYyCT2NL22mVBimj5YiH9pe//rusaIrqLhhsQgAAEIACBixBYWk88SBFdRXUWrxK9va9gnyqiU8DnWrTHi2ZYwYoYIAYcA0sTXdpfJNOeMUkV0Zqq1ZdLIKKTBm0IQAACEIDA5QlkrTDS3r2I9leq83T5kFA+dK8nov11bhd4vvr3ohHRFP+OCa7EAjFwfgyMJLeezeXT7rIZW4K51ZezIqL/ReODDz64/3aX8vQ777xz9+qrr94999xzT1C9+OKL931POk5oaL433njjhJGXH6J9bsWXy++OGSEAAQhsi0Cvbuj171pE++vZVcQeEsqH7vVEtIpijcs/LJZ9dX2K6POLaBjCkBh4uDHQS2gj/Wun7JZgbvWln9cU0RKjyl/53qpwk4/y1y9EtElwhQAEIACBcwmM1BBps1sR7dPhloBVIu59ZfvQvUMiWgW9RHQWIjqJVl9vLUTAwxUBPHuePTFwegxkElvaPjfJnju+JZhbfbnOtUS0Tm6Vs+pLp7F5wlvvr/H58ePH977q2nvNehI9srfenumHAAQgAIHLEFhaT+xSRFvM9v6g1yGhrHu9ccdEdKsoPjRfy56+0wtr2MGOGHgYMbA00aX9ZVLt6bO0BHOrL1e4hojWafMhobylrzWLhb/KjYjOyKANAQhAAAKXIpC1wkh7dyJaolXvQ8V0769p++vf+fvTOc9SEe3fx845aD+MIp/nzHMmBq4XAyPJrWdzqWR76jwtwdzqy/n1/5XW+5Iv5cn8anSd21/zdr9Ft09NnWtbX/3W16x9X9cUvp7Hoth2aeM1fa3zaYxe9eS5fpaN1vMaumrdQ6/WPx7U9fW59dLYXMt7qnvNf7yo/tlHc67+1jXqM5Rv4uDnZ39a/tIHAQhAAAKfEujVDb3+XYnoUZHrr3rXIlfj6+81p83o/B6juTTGn7ler6iGLWyJgYcTA72ENtL/abpcp9USzF/50R8OiuT3P/nH3ee/+Zu7b/z8zxdx2gLNIq81abWx2EsBaHGYQq4KWYs5r+F5ZOeXhF/O6/68eq30ua5VP1tQep7WHL7nq/yQj35pzuqbPqf/spVYTXGtfdtX9bst2+pnZS0b96WIrmvYJv3VWtVO61V/vT+uEIAABCDwLwIjNUTa7EpEK3GM/v6xBK7//88qvo+dQsvmkIiuYlnzHxLkFPwPp+DnWfOsiYHLxkAmsaXttYuFKqJHBbJOojX2Ei+LyUNzWaBZxFn81jEpVGVbBafs1Weh3ZrHa+nae9nntKliND97zjqfbFJ01vvy1fdba8rec9uXZFDna30Wi+RU58s1kn+O8bx1LvlS7bwPj+EKAQhAAAKfJbC0ntidiJaQ7r3r17QlotNWfwjsULF7SETnPGpXUX1oXu5dtsCGJzyJgX3HwNJEl/afTZu37aki+ss//P3BU2h7dw0RbRHoNfJahZ2EZRVnsk8RZ4Fc86E+W5i25vFaFozph9sWgulzimbZ5Wf51fJDfRKavZf2mL5qztZL82gNvXJMy1Z9WjP9SZbef+7NfWbSE/+VS0vQV5uej/RDAAIQeMgEslYYae9KRFM477tw5vnyfIkBYkAxMJLcejZrFwhVRI+K41G70f2lCGyNSXGs+y3xq/6069nk/C2bKhjT3u2WEEzRLLv8bBHt8aPXFMTydVREW1DXdby3FO7JTPa20dUv9yGiTYQrBCAAgesS6NUNvX5E9N8pShEmxAAxQAzMFAO9hDbSf90UfHx2iWj9fvP/+D//795Y4vgL3/r4/jRa7d5bY772sz8dX2DQQqIuT0PrsBSTuidBKeFdX5rHAnFEuN5KRLdEd/W99Tn37TmqnQWuRW8yqLZVMOt+ZVDnk437LKJ7gr7OL1+q8Pc+7G/1kc8QgAAEIHC3+B/oEdGI6INfYZ+psMZXhCAx8DBiYEQs92zWLhQ+/ss/77743cdPhLRFs8T1obcEtMZe8iXB2BLG6qtCzCLagll+WDRb6KlPc9ax+bkKSI2pgrG1x5YQ1LzpT+uz/MmX7A+JyRTRGqc56xz6nOvaN+3NL7HROmbkNb3XOmf9ZoDtkq1scl3baA2/dD95q9/+2QfbcoUABCAAgU8J9OqGXj8iGhGNiCYGiAFiYKoY6CW0kf5P0+V6rRTSOoWWeF7rZXEsgeZ3ijL7ZfFrUWjbljCTQPR9XVNceh7Pq6vFYArGvK92Swi2RHOKTI2TTfpS79d15Hv625qj3peN9+C1UiRrzewXw7yv8ZrTNtqr56tMbONrvY+Irk+UzxCAAATGCIzUEGmDiKZ4nqp45qTxYZw08px5zodiIJPY0vZYKr2+lYS0TqH1Ne0f/PJv11/wzBVa4vfMKRkOAQhAAAIQ2AyBpfUEIhoRjYgmBogBYmCqGFia6NJ+M9l6MkcQ0ZM9MNyFAAQgAIFFBLJWGGkjoimepyqeD51OcY/TS2LgYcTASHLr2SzKqBg/IYCIfoKCBgQgAAEI7JBAr27o9SOiEdGIaGKAGCAGpoqBXkIb6d9h3r/JlhDRN8HMIhCAAAQgsBKBkRoibRDRFM9TFc+cND6Mk0aeM8/5UAxkElvaXik3sywEIAABCEAAAhsmsLSeQEQjohHRxAAxQAxMFQNLE13abzh/4xoEIAABCEAAAisRyFphpI2Ipnieqng+dDrFPU4viYGHEQMjya1ns1JuZlkIQAACEIAABDZMoFc39PoR0YhoRDQxQAwQA1PFQC+hjfRvOH/jGgQgAAEIQAACKxEYqSHSBhFN8TxV8cxJ48M4aeQ585wPxUAmsaXtlXIzy0IAAhCAAAQgsGECS+sJRDQiGhFNDBADxMBUMbA00aX9hvM3rkEAAhCAAAQgsBKBrBVG2ohoiuepiudDp1Pc4/SSGHgYMTCS3Ho2K+VmloUABCAAAQhAYMMEenVDrx8RjYhGRBMDxAAxMFUM9BLaSP+G8zeuQQACEIAABCCwEoGRGiJtENEUz1MVz5w0PoyTRp4zz/lQDGQSW9peKTezLAQgAAEIQAACGyawtJ5ARCOiEdHEADFADEwVA0sTXdpvOH/jGgQgAAEIQAACKxHIWmGkjYimeJ6qeD50OsU9Ti+JgYcRAyPJrWezUm5mWQhAAAIQgAAENkygVzf0+hHRiGhENDFADBADU8VAL6GN9G84f+MaBCAAAQhAAAIrERipIdIGEU3xPFXxzEnjwzhp5DnznA/FQCaxpe2VcjPLQgACEIAABCCwYQJL6wlENCIaEU0MEAPEwFQxsDTRpf2G8zeuQQACEIAABCCwEoGsFUbaiGiK56mK50OnU9zj9JIYeBgxMJLcejYr5WaWhQAEIAABCEBgwwR6dUOvHxGNiEZEEwPEADEwVQz0EtpI/4bzN65BAAIQgAAEILASgZEaIm0Q0RTPUxXPnDQ+jJNGnjPP+VAMZBJb2l4pN7MsBCAAAQhAAAIbJrC0nkBEI6IR0cQAMUAMTBUDSxNd2m84f+MaBCAAAQhAAAIrEchaYaSNiKZ4nqp4PnQ6xT1OL4mBhxEDI8mtZ7NSbmZZCEAAAhCAAAQ2TKBXN/T6EdGIaEQ0MUAMEANTxUAvoY30bzh/4xoEIAABCEAAAisRGKkh0gYRTfE8VfHMSePDOGnkOfOcD8VAJrGl7ZVy88Fl3//kH3c/+OXf7j7+yz8P2nETAhCAAAQgAIHrEFhaTyCiEdGIaGKAGCAGpoqBpYku7a+Tes+b9as/+ePdo3/79f37Kz/6w3mTMRoCEIAABCAAgcUEslYYae9aRL/77rt3jx49unv99dcvUiBqHs2neQ+dkmzlnnx94YUXpvB1K8zwgxNQYmD7MTCS3Ho2i7PqDQZIRD//vd/efePnf777/Dd/c9cT0t/5xV/vvvCtj+/F9g3cYgkIQAACEIDAgyHQqxt6/RcR0RKXzz///L3AlHB75pln7t5+++3VxRsiGhGNINq+IOIZ8YyWxkAvoY30b7EasIiWb/pat06lJarrW/1f+v7vENFbfIj4BAEIQAACUxMYqSHS5mwR/dJLL92L52efffbutddeuz/1Vd+bb745tYjWPwxoT1nccRJNsZ/xQJt4IAbWiYFMYkvbW8zwKaLl39d+9qc79dW3Tqotsm+xjzfeeOM+v99iLdaAAAQgAAEIrElgaT1xtojWybNOobdYTJ5zEq2vQWtvuS9E9DoFcz4D2jwDYoAYWJro0n7NBC0B3Hp/+Ye/vz91HvHtUiLaAll5zu8XX3zxKRds81TnBj688847T3y27x988MEGPMMFCEAAAhCYlUDWCiPti4hondh+8sknTwnOLHR1T6fU+pq3Ep7sf/zjHz9l75NfJ0SdZuecFrX6mrjmyd/1rWO1ltZPES0br1/nTl89xn74KhuLaPn+yiuv3O9Fc3o9zzOyX9vqqjn0zj6tm30fffTR/Xq5lk77xdK28q/OIU7y13Yt9jmGNgKFGCAGth4DI8mtZ7NWctepsv94WOuqr26PvC4poqto1ufnnntuxI1FNhLjda1FE4RxS9hLVOvtl3LipUT1JX23f1whAAEIQGB7BHp1Q6//bBEtUaeEJXEmgZvC14WYhJwEoUSeBJ1/f1qC1TYar/vq81fEdfV9i2iNzTUsZnVf4/VWn8ZZEGttzaV7Xlttz51XiVXds+hU27a6WrBq3/qsudWXexnZb67pPXz44Yf3PomR5tTbfWKb69gXjU1m9lXzy177MFv5bH+1z/SBNsKJGCAGZomBXkIb6d9e2r67/9r2FkT048eP7/PGpQSoWV9SiErkp2D2GnlV7rvUHi7pe/pIGwIQgAAEtkVgpIZIm7NFtIounYhanOkqEehizIIw/9CYT1UtdmWbwlifNY/ensci2qJS/RbJKbZtn/fz6+YarwSr+dK2tr1e9lu41tNgzWfxOrrfnNdj/Hvkmt/ru0+szEOstGby03wWzJ5bNhqTbC3G7a9tuSKgiAFiYJYYyCS2tL2tlP0vb+rvROuPh9U/KqbP+tr3NU+i5Y3yhgXoq6+++tQJsk6T1efTYNkeO7nWfdn5nfYW7b6nq/oOvTRe67dera95W3DXe/Vk3Hv13vT5kO+t9emDAAQgAIF5CSytJy4iolV4SahJmEm0KRFaNFt4ZpJ0O4Ws7CUK1ec5ZOeizqLSn3X13Cna875FdhWMmjfXzjFuH1ovT53rGvbJe8xrb02LYv9jgES/xLPs3SeBbNHsNXPubHsP6qtremzt9xiuCCligBjYegwsTXRpv8X0niJaf1RM/5ur+kfF9Fn9l/pfXLVOWC1qLWQtLM1MwlN5JUWshKbsDr1aa0moay6LXI230LWIb83pcSnGq53mrXNU0VzFuPZQ96Z5W77X9fgMAQhAAALzE8haYaR9MRHtosuCUKJPfRaVEoUScPn2qbJtJBglpmXjr117Xok+JTh/zrlln/1uq19j1hDRh/Zr//Kq/ekfD3xK76+VZ5//YcL7kqhWu749r/ZexbLHWpzblivCiRggBmaJgZHk1rPZYpqXQP7idx/fnzTr96X1V7hbr/c/+ce9zehXv1tzuK8lDpUzUhC3RHQVoxK+hwSt1mutpXlyLfulvla/7/uqNeVva231VxHtcb5Wn7Rma65q5/FcIQABCEBgXwR6dUOv/ywRLUHmrxu7+LKIlvhTn4SfElp+Bdq2vlaB7Dk0rmeTc/cEoQXjLUX0yH69p7yKozn5HyDsv9jpnrhojIV2fk0953JbY/QcPE79/geL+tw8hitCihggBrYeA72ENtK/xZQvES3xLCGtr2vf4iVxqByRb/XlS8IyRXNL+Pr0OMfVdkuIat2W0JVtS8zWOf3ZYtqn5+rvzS3/c7+5t7pXz9/y3fe4QgACEIDAfgiM1BBpc7aIVkKS6JPQ01tt9Vk0S8C5TyenEnF6S/hKJKpYU9tjdM+n0OpzMVeFtvttq/ueu37tWf2211Xz1hPavK+215NvFumaR2Ptt+wsdL3GyH7rWvpsYWyWtpEIVl8VzGZW953iWL5qvMbKP4vxKqy9FlfEEzFADMwQA5nElrb3k+7P28mIOKzCcosiWhSqn8p9KdDVVp/27Ffdf52jZ+d+rhCAAAQgsC8CS+uJs0S0BGMKZyUpCTZ/7djFmASiRZ+FnYSuT0j1tW6LYQlG/6Et2XoOi1p/9lVzaC4JQ9lrvAVtFbgeI7tjIlo+aS7PqbEjIlp2x/ZrP+rV6+XveJtbimONM3vvW37K1l+Rl433qedhO+07baoPfEZEEQPEwNZjYGmiS/t9pfzTd1NFZGumKiwvKaI1V4par6819V7yqntR7ksRXe9r7rq3+tnrt8b6HlcIQAACENgPgawVRtpnieitF1r4hxggBogBYmB/MTCS3Ho2+0n35+1kRBxWYXmqiG595dunw7rnl+3yq9m+52vrq94SzdqPX7LJz2rLxi+vrf34Vffqfvvkz1whAAEIQGCfBHp1Q68fEf33/RWYiAaeKTFADOw5BnoJbaR/n6l/+a5uKaLlnX93OUWwxawErt/HdmK7vKYQ13gLX9n4ngSzx/gUfERE93w/5if3IQABCEBgLgIjNUTaIKIR0U++Mr/nopu9ISqJgf3EQCaxpe25UjreQgACEIAABCBwCwJL6wlENCIaEU0MEAPEwFQxsDTRpf0tEjFrQAACEIAABCAwF4GsFUbaiGiK56mKZ04T93OayLPkWZ4aAyPJrWczV0rHWwhAAAIQgAAEbkGgVzf0+hHRiGhENDFADBADU8VAL6GN9N8iEbMGBCAAAQhAAAJzERipIdIGEU3xPFXxfOrJFeM49SQG9hMDmcSWtudK6XgLAQhAAAIQgMAtCCytJxDRiGhENDFADBADU8XA0kSX9rdIxKwBAQhAAAIQgMBcBLJWGGkjoimepyqeOU3cz2kiz5JneWoMjCS3ns1cKR1vIQABCEAAAhC4BYFe3dDrR0QjohHRxAAxQAxMFQO9hDbSf4tEzBoQgAAEIAABCMxFYKSGSBtENMXzVMXzqSdXjOPUkxjYTwxkElvaniul4y0EIAABCEAAArcgsLSeQEQjohHRxAAxQAxMFQNLE13a3yIRswYEIAABCEAAAnMRyFphpI2IpnieqnjmNHE/p4k8S57lqTEwktx6NnOldLyFAAQgAAEIQOAWBHp1Q68fEY2IRkQTA8QAMTBVDPQS2kj/LRIxa0AAAhCAAAQgMBeBkRoibRDRFM9TFc+nnlwxjlNPYmA/MZBJbGl7rpSOtxCAAAQgAAEI3ILA0noCEY2IRkQTA8QAMTBVDCxNdGl/i0TMGhCAAAQgAAEIzEUga4WRNiKa4nmq4pnTxP2cJvIseZanxsBIcuvZzJXS8RYCEIAABCAAgVsQ6NUNvX5ENCIaEU0MEAPEwFQx0EtoI/23SMSsAQEIQAACEIDAXARGaoi0QURTPE9VPJ96csU4Tj2Jgf3EQCaxpe25UjreQgACEIAABCBwCwJL6wlENCIaEU0MEAPEwFQxsDTRpf0tEjFrQAACEIAABCAwF4GsFUbaiGiK56mKZ04T93OayLPkWZ4aAyPJrWczV0rHWwhAAAIQgAAEbkGgVzf0+hHRiGhENDFADBADU8VAL6GN9N8iEbMGBCAAAQhAAAJzERipIdIGEU3xPFXxfOrJFeM49SQG9hMDmcSWtudK6XgLAQhAAAIQgMAtCCytJxDRiGhENDFADBADU8XA0kSX9rdIxKwBAQhAAAIQgMBcBLJWGGkjoimepyqeOU3cz2kiz5JneWoMjCS3ns1cKR1vIQABCEAAAhC4BYFe3dDrR0QjohHRxAAxQAxMFQO9hDbSf4tEzBoQgAAEIAABCMxFYKSGSJuri+hPPvnk7vXXX797/vnn7x49enT/fvbZZ+9eeeWVu48++miqwu3UUxPGceJGDBADxMDlYiCT2NL2FlP6+5/84+4Hv/zb3cd/+ecW3cMnCEAAAhCAwO4JLK0nriqiP/zww7tnnnnmTqJZQvrdd9+9f7/55pt3L7zwwr2gfvvttxHSnIIRA8QAMUAMDMfA0kSX9lusAr76kz/ePfq3X9+/v/KjP2zRRXyCAAQgAAEI7JpA1goj7auJaAtonTj3TmAkoHU6jZC+3AlNjzX9MCYGiIG9xMBIcuvZbLECkIh+/nu/vfvGz/989/lv/uauJ6S/84u/3n3hWx/fi+0t7gOfIAABCEAAArMS6NUNvf6riWh/ZftY0WYhvYevdusfBHTifmzP3EfMEAPEwIwx8NZbb9299957q/83rpfQRvq3mNwtouWbvtatU2mJ6vpW/5e+/ztE9BYfIj5BAAIQgMDUBEZqiLS5ioiWMNbXuPX70COFor7afejEemSOLdggohFGW4hDfCAOrxEDEtAvv/zy/XttIZ1JbGl7ixk+RbT8+9rP/nSnvvrWSbVF9i328cYbb9x/W+wWa625xnPPPXenvfZex+73xtEPAQhAAALzEFhaT1xFREsQv/TSS0MCWsWefkdaJ9fXKPxuOSci+rPi5fHjx/dF969+9atpnu/Xv/71u5/+9KfT+HvLGGetz8b4Q2Ei4WwRreuaQnppokv7NdO5BHDr/eUf/v7+1HnEt0uJaAtk5S2/X3zxxadcsM1TnTv8cEwkH7u/QyRsCQIQgMCDI5C1wkj7KiJaJ8tLvtasPzimJD57MXppES3hmUXr2oXrKc8HEf1wRdcp8cKYbcfLVoT0SHLr2axVFehU2X88rHXVV7dHXpcU0VU067ME46VfEuN1rVPXUE5RrtX1Uq9jIvnY/Uv5wTwQgAAEILAegV7d0OvfpYiWgPe/rPvq37nWibdEvoW77/uPm+kU3X26elwt7tPGdrou+ceDOmd+drGqQsH9EtWznZDuQUSL+be//e0nz8HPg+u2BR/P5zrPx/9t8j/wrXEi3UtoI/3rpef+yvXr3H3LT39n+pDNyL2WsLVA/eCDD0amGLZprTU8uBjaR10v9Tomko/dv5QfzAMBCEAAAusRGKkh0uYqIvq11167F6qjRayEp/4/0qP2h+wkkiVm00bC2GLY9yWkbWPhrHtqu182dS7No760c98lRbRE22yC2dzyioi+jpBJxrRhfOsYWFtIZxJb2l4vPfdXriJafzys/lExfdbXvq95Ei0Plccsol999dWnTpB1mqw+f81bthKYh166Lzu/096C2Pd0PSSOc12Psa/1nvzMV10rT8arSNZYza859fL9ukb11ePsm8fbD/W/88479/Opbd99nysEIAABCKxHYGk9cRURrf+9lRKEheuxAk/i9RInuD6BPrSeRXTaWATrXvb7tNqn1LonYV3t1O+/Mn6JfWg+iWj9IZ/0p9WW0PaJkK6t3z3O+4dOVF0Y5zqtPvmVvtWvnaf4V5Fhv7S2fdHvHec6tZ3jPEZ9svM996cvum+ffd/+2M+6lnzRGPfn70Sr7Xl0Tb/rPY/niqh9CDFQf87yZ+ja+1+a6NJ+vfTcXzlFtP6omP43V+qrb/Vf6n9xJYGXQlLe6b+tyt266iVRmDZq636KQwnMKljrTltrSUBqLolKv9RW3yFxWX302PRTfXXu+rnuwZ91la0ZaC7tUX22UZ8Fs9fXNX2wn7kXzVHnzvG0IQABCEBgPQJZK4y0ryKiVUDpD4vpdPnYX+jWie6Sv+R9qDiTuM0T4patbPIU2jZKbHWsxbWFcf3ssb5qDtu679SrErDFW28OiccUxRaJGqsxniOF9TFxrjWzGLbwzTkkHv3ZhXT6mHPYB/V5jGw1R/qe49N3jct7mkN93qPnqkI579d7OZ/H557lm8fovtrV18ox7ev8fEZU7zUG9N8g/Tz6nT9319zzSHLr2ayXnvsrSyx/8buP70+a9fvS+ivcrdf7n/zj3mb096dbc7hPgjBFn/qVw1IQt0R0HeOTVc/burbW0jy5lsepr9Xv+4qxESGa8xwb45Nmi3jZ56v3DwXyI/8RIMeorT2m8JZ9fq72fIYABCAAgfUI9OqGXv/VRLT+4rYShoR060Ra4toCWifX5xZcFrh5atya8xwR7ZNpXVtza7+XEtGe3yK2ikkl+dqnMbK3oFOB67bnswj153rVGL3drzU0h/vq+BTUHiN7i077mSJVdp5H9z0ur71xmrfOpc/yQ+OzH4++nQAADrtJREFUnfOp7TVrv8bmnCMiuo6pc/IZ4bz3GNDPjMWzrvkzdO299xLaSP966bm/skS0xLOEtL6ufYuXxJxyVr6rwJMQTdHcEr4Wnod81rw5j2y1bp7SerxsJVp7L+UGjdW1vnxi7D2lGNf66q9+aA6N89jevJWNxmmu2u+1fc376jskuut++AwBCEAAArcjMFJDpM1VRLS/2iwhrRNpJQ6d/kpg6q0+nT5L0F5CQKtgm0FES4hm0WlhOlJwWkxLCMq+FrCteSX0sj/bKhRa62pejfMa8lFruq8lkHNet22vddRnv3PNXr9seuM8f+vquX1v9B8Q5GsKAH3Osblnr6E+r+M+rgjnhxID9b8/+fNzCwaZxJa2b5eOt72SxF1LUKbXs4hoC/kUqHkSnXuyWE6BrT6L7BS9Hqf7rf4U0bqvWif/YSDvay5EtIlyhQAEILA9AkvriYuLaAvoPBGWUPYfG5OY1gl03r9U0aUEdewk+JyT6ENC3feOrX/OXiXcLE5dxB6ar4rBQ7a+Z/GqqwS0i2MJRvXlSbBtWwK5ztey0Zytfo3tza0x9slrtK4en/ZaS5+r/Ski2nP4H0b8XNzPFUG91xjwf3v0s5Q/X7fc79JEl/bbS9vreLS2iK4C0xR64tf39d925Xpd/WqN0fwplG2rq4RuzmGR7P4U47LX/dZcmsOiubUfz+u1ZV/n9j2uEIAABCCwLoGsFUbaFxXRLQF9y8JK4lxJ6tCa54hozdsbL/Gsta8polW8WqxZEKqQ6O1XgnfJabfnsVBOwZl9ueaxIlq2LRv77zXr1eOqyF76DwP5Dw9eM/3XutW/ukbrJLr6W+eo9/mMqN5DDGxBQIvjSHLr2ayborez+i1FtE+Kc/ctwWo7/Tf60KuKUQlcCVa/PI+Fr9bKk2Tft32KXd/T1S/d15oWzOqXaM419Vlvv3wynetWv23LFQIQgAAE1ifQqxt6/RcT0WsLaBeoSlISuv6sq8S1TorV7olgjZNdjmudLnufKZbVp3k1R/bnXEvbFss5Tn0piiVsq53uWyRaNObJre7lHDm/2xaemt99FvDZp3uylYD0muqTrddUv+7r7bl01edDfnhcFdGaV2OzX235YX/yntZInytD3dd89ldzyMbz6bPXVNvvnLPnq225fsoNFvOy8M+Bfl7qz8ytn2svoY30r5+mt+HBLUW0dmwhmsLTQlq50+8ROhaoGmNh6/nVJ/Hst+bTf6M9v6/q80tjU+x6foti39dnj/c9z6Gr7+lqvjmv+lOc51jaEIAABCCwLoGRGiJtLiKiLSx1vXUx1VpPXxnPZJai+lwRrfX8B8a8hufX50uKaBervqaw874l5nxf1ypMJSjzvtoqHjy+dbUoTGHpvpYP6ss1Uth7XPWjNU/6kuOyX+1azGtt29R76YtsPK/9lb1scq9VRGuc+jTG8/lzzmMfuM4rFHl2/Wfnf3BSzOfPyxrMMoktba+bolkdAhCAAAQgAIEtElhaT5wtorcmoNco6FizX3jDBjbEwH5iQEJ6bQGteFqa6NJ+i4kbnyAAAQhAAAIQWJdA1goj7bNENAJ6P8UxQodnSQwQA7PEwEhy69msm6JZHQIQgAAEIACBLRLo1Q29/rNEtP43VVv5CvcsxR9+IlSIAWKAGDgvBnoJbaR/i4kbnyAAAQhAAAIQWJfASA2RNmeJaArB8wpB+MGPGCAGiIHlMZBJbGl73RTN6hCAAAQgAAEIbJHA0noCER1/cZlidnkxCzOYEQPEwK1jYGmiS/stJm58ggAEIAABCEBgXQJZK4y0EdGI6Cd/2frWhTDrIb6IAWLglBgYSW49m3VTNKtDAAIQgAAEILBFAr26odePiEZEI6KJAWKAGJgqBnoJbaR/i4kbnyAAAQhAAAIQWJfASA2RNohoiuepiudTTq0Yw2knMbCvGMgktrS9bopmdQhAAAIQgAAEtkhgaT2BiEZEI6KJAWKAGJgqBpYmurTfYuLGJwhAAAIQgAAE1iWQtcJIGxFN8TxV8cyJ4r5OFHmePM9TYmAkufVs1k3RrA4BCEAAAhCAwBYJ9OqGXj8iGhGNiCYGiAFiYKoY6CW0kf4tJm58ggAEIAABCEBgXQIjNUTaIKIpnqcqnk85tWIMp53EwL5iIJPY0va6KZrVIQABCEAAAhDYIoGl9QQiGhGNiCYGiAFiYKoYWJro0n6LiRufIAABCEAAAhBYl0DWCiNtRDTF81TFMyeK+zpR5HnyPE+JgZHk1rNZN0WzOgQgAAEIQAACWyTQqxt6/YhoRDQimhggBoiBqWKgl9BG+reYuPEJAhCAAAQgAIF1CYzUEGmDiKZ4nqp4PuXUijGcdhID+4qBTGJL2+umaFaHAAQgAAEIQGCLBJbWE4hoRDQimhggBoiBqWJgaaJL+y0mbnyCAAQgAAEIQGBdAlkrjLQR0RTPUxXPnCju60SR58nzPCUGRpJbz2bdFM3qEIAABCAAAQhskUCvbuj1I6IR0YhoYoAYIAamioFeQhvp32LixicIQAACEIAABNYlMFJDpA0imuJ5quL5lFMrxnDaSQzsKwYyiS1tr5uiWR0CEIAABCAAgS0SWFpPIKIR0YhoYoAYIAamioGliS7tt5i48QkCEIAABCAAgXUJZK0w0kZEUzxPVTxzorivE0WeJ8/zlBgYSW49m3VTNKtDAAIQgAAEILBFAr26odePiEZEI6KJAWKAGJgqBnoJbaR/i4kbnyAAAQhAAAIQWJfASA2RNohoiuepiudTTq0Yw2knMbCvGMgktrS9bopmdQhAAAIQgAAEtkhgaT2BiEZEI6KJAWKAGJgqBpYmurTfYuLGJwhAAAIQgAAE1iWQtcJIGxFN8TxV8cyJ4r5OFHmePM9TYmAkufVs1k3RrA4BCEAAAhCAwBYJ9OqGXj8iGhGNiCYGiAFiYKoY6CW0kf4tJm58ggAEIAABCEBgXQIjNUTaIKIpnqcqnk85tWIMp53EwL5iIJPY0va6KZrVIQABCEAAAhDYIoGl9QQiGhGNiCYGiAFiYKoYWJro0n6LiRufIAABCEAAAhBYl0DWCiNtRDTF81TFMyeK+zpR5HnyPE+JgZHk1rNZN0WzOgQgAAEIQAACWyTQqxt6/YhoRDQimhggBoiBqWKgl9BG+reYuPEJAhCAAAQgAIF1CYzUEGmDiKZ4nqp4PuXUijGcdhID+4qBTGJL2+umaFaHAAQgAAEIQGCLBJbWE4hoRDQimhggBoiBqWJgaaJL+y0mbnyCAAQgAAEIQGBdAlkrjLQR0RTPUxXPnCju60SR58nzPCUGRpJbz2bdFM3qEIAABCAAAQhskUCvbuj1I6IR0YhoYoAYIAamioFeQhvp32LixicIQAACEIAABNYlMFJDpA0imuJ5quL5lFMrxnDaSQzsKwYyiS1tr5uiWR0CEIAABCAAgS0SWFpPIKIR0YhoYoAYIAamioGliS7tt5i48QkCEIAABCAAgXUJZK0w0kZEUzxPVTxzorivE0WeJ8/zlBgYSW49m3VTNKtDAAIQgAAEILBFAr26odePiEZEI6KJAWKAGJgqBnoJbaR/i4kbnyAAAQhAAAIQWJfASA2RNohoiuepiudTTq0Yw2knMbCvGMgktrS9bopmdQhAAAIQgAAEtkhgaT2BiEZEI6KJAWKAGJgqBpYmurTfYuLGJwhAAAIQgAAE1iWQtcJIGxFN8TxV8cyJ4r5OFHmePM9TYmAkufVs1k3RrA4BCEAAAhCAwBYJ9OqGXj8iGhGNiCYGiAFiYKoY6CW0kf4tJm58ggAEIAABCEBgXQIjNUTaIKIpnqcqnk85tWIMp53EwL5iIJPY0va6KZrVIQABCEAAAhDYIoGl9QQiGhGNiCYGiAFiYKoYWJro0n6LiRufIAABCEAAAhBYl0DWCiNtRDTF81TFMyeK+zpR5HnyPE+JgZHk1rNZN0WzOgQgAAEIQAACWyTQqxt6/YhoRDQimhggBoiBqWKgl9BG+reYuPEJAhCAAAQgAIF1CYzUEGmDiKZ4nqp4PuXUijGcdhID+4qBTGJL2+umaFaHAAQgAAEIQGCLBJbWE4hoRDQimhggBoiBqWJgaaJL+y0mbnyCAAQgAAEIQGBdAlkrjLQR0RTPUxXPnCju60SR58nzPCUGRpJbz2bdFM3qEIAABCAAAQhskUCvbuj1I6IR0YhoYoAYIAamioFeQhvp32LixicIQAACEIAABNYlMFJDpA0imuJ5quL5lFMrxnDaSQzsKwYyiS1tr5uiWR0CEIAABCAAgS0SWFpPIKIR0YhoYoAYIAamioGliS7tt5i48QkCEIAABCAAgXUJZK0w0kZEUzxPVTxzorivE0WeJ8/zlBgYSW49m3VTNKtDAAIQgAAEILBFAr26odePiEZEI6KJAWKAGJgqBnoJbaR/i4kbnyAAAQhAAAIQWJfASA2RNohoiuepiudTTq0Yw2knMbCvGMgktrS9bopmdQhAAAIQgAAEtkhgaT2BiEZEI6KJAWKAGJgqBpYmurTfYuLGJwhAAAIQgAAE1iWQtcJIGxFN8TxV8cyJ4r5OFHmePM9TYmAkufVs1k3RrA4BCEAAAhCAwBYJ9OqGXj8iGhGNiCYGiAFiYKoY6CW0kf4tJm58ggAEIAABCEBgXQIjNUTaIKIpnqcqnk85tWIMp53EwL5iIJPY0va6KZrVIQABCEAAAhDYIoGl9QQiGhGNiCYGiAFiYKoYWJro0n6LiRufIAABCEAAAhBYl0DWCiNtRDTF81TFMyeK+zpR5HnyPE+JgZHk1rNZN0WzOgQgAAEIQAACWyTQqxt6/YhoRDQimhggBoiBqWKgl9BG+reYuPEJAhCAAAQgAIF1CYzUEGmDiKZ4nqp4PuXUijGcdhID+4qBTGJL2+umaFaHAAQgAAEIQGCLBJbWE4hoRDQimhggBoiBqWJgaaJL+y0mbnyCAAQgAAEIQGBdAlkrjLQR0RTPUxXPnCju60SR58nzPCUGRpJbz2bdFM3qEIAABCAAAQhskUCvbuj1/3/Mux5bQ1Pa1wAAAABJRU5ErkJggg==&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Step 3:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;On the command prompt window, you need to type in the given command –&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;wmic path softwarelicensingservice get OA3xOriginalProductKey&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;193&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABE4AAAFNCAYAAAAekCqFAAAgAElEQVR4Ae3d36ssW34Y9nN/zr137pkkGpB0hR+MorkiJAERjsToSrYmMqM4CiLgkTgSyEg48jVmUF4E+yUR6CmGgNDgLaL8jpwER5D44Sj4kmCQCMZ4ZJ2RIS+JGMib3u9/0GFV9bf6W6trVVXv3b13d+/PhUN3V69aP77rU9W1vru677Nf//Vf37T//c3Nz371Zze/3JUpz396841fi/Lzr3/t539689WvfjX9i31znVN1lffzfuV57Bvlr+vx07/zd2bm4KHGOjWfMffRh1xmzTzmedvN68/+ctR3Ho/nEf+Hj8VTHXf7fPfwc/DQfenPy3Fc5+O5jH38ev4cno/tsu/f3nzjp2Pb7ljffQbEe9FOf44/t3PBQ8/HU2zvqZ53nuq4n6JxY177WVo+K+LzaGqfqffz51T9vK6rfj9/DkV7pYzPI2bDg8clC0/9s+xZCZD/REAEREAEREAEREAEREAEREAEREAEREAE9iMgcbIfE1tEQAREQAREQAREQAREQAREQAREQAREoIuAxAkIIiACIiACIiACIiACIiACIiACIiACItCIgMRJIzA2i4AIiIAIiIAIiIAIiIAIiIAIiIAIiIDECQMiIAIiIAIiIAIiIAIiIAIiIAIiIAIi0IiAxEkjMDaLgAiIgAiIgAiIgAiIgAiIgAiIgAiIgMQJAyIgAiIgAiIgAiIgAiIgAiIgAiIgAiLQiIDESSMwNouACIiACIiACIiACIiACIiACIiACIiAxAkDIiACIiACIiACIiACIiACIiACIiACItCIwLP/6Nd+rfGWzSIgAiIgAiIgAiIgAiIgAiIgAiIgAiLwtCPw7Jd/9W+visA///afbo75b1WjComACIiACIiACIiACIiACIiACIiACIjAI0ZgdeLkd/7+723+u3/wDzf/0//yj1b9u/2v/sHmt2//283v/8//6+bv/fZ/ufmv/4d/uCnb/t5v/xebUpf/REAEREAEREAEREAEREAEREAEREAERODcI3BQ4uSP/umfbP7v//f/W/Xvf/xH/2TzO//N/7b59r/8fzb/6X/+32/+8R/9yaZs+0/+s9+TODl3FfonAiIgAiIgAiIgAiIgAiIgAiJwVhF49uzZ5pB/Z9X5AztTxvn69evFvUqZUvbU/x2UOPk//8kfbf70O/9y1b9/9u0/3fzTf/4nm3/x+s82/9c/+/bm2//iO5uy7dU//j9WJk6+u/nWJ882zz751ua7K6Pw3W99snn26WcrS08X++zTgvHTzdpaDi0/3er5bu1iOjpA18fmfEe1rmdLnvq5zyevTzbfWot1XReUEgEREAEREAEREAEREAEREIEuAockCA4pe47hjYTIXPJkTZljje2gxMkvvPylzV/5K3/1Xv9KHau+qvPdb20++eSTzSfP1i9Glxa6xwraner57NODkkDNNo5VT7OBeGObuKqTSJ99urlnbioaOPvHJU8lcfJJypT0Sab1Xh88AA9m58FHpkEREAEREAEREAEREAERuPoIHJIMOaTsuQZuLjEy994pxvPs448/XlVvSXb8m//Wv33QrUFlsup/pY41iZNYlHZ/1V+5Ul9a6K4a6KkKHWvReqx6FsbZxfKAu30WqrvIt5c8hdHd4PpkU06m7N47g2cPZOcMRqoLIiACIiACIiACIiACInB1ETgkGXJI2XMO1FSCZGrbqcdwp8TJ933f921+7ud+rvtXntfJkR/7sR/blIRMvb28Xpc4+WzzadxpUu48qe962EalS6pEcuaTb20+q76q0y9sP+u/8rMt1+VgujojqTP+6sl4MdwvhD/9LO6+KPuM7ygYl99sNmVxGn3alh31s7zXd6Lr16eflbGWerf9GPVt/FWl6Xr6YPR3O8SYoo3gE+NIbXXtjMcSpTebvtyafNV8uyUc5a6Mu8zBYftsZuK22cT42/NYxj6K74SnXXz6Z/3Y8ndz+vr7xEm0mWK+reB0MfvuZlR3SnyNxjYYrEfktQiIgAiIgAiIgAiIgAiIwLlGoKwz1/53SNm1dT5WuZwoyc8fsj8HJ06eP3++efny5eYv/uIvun/ledn23nvvbUoS5a233tr84R/+4ea3fuu3UgJht6BflTgZ/WU8FqDjsHQLwbQwHBIWabXfLxZ3yYFhUTnst11IV/vs7hjYvp+SJXW75fVQvk5GfPat3W9ejMZUxtLX/cknn+7KlK3fyq/3+9eNc+h/H5N+XDkBVO830Vbd1xzeLvmT68tv7p4vtxvJiMPnICeo1szbfNy28ViYx9Hv6UQCLNnYjbx/Npr7blPfTr/LRMy7+f1klyRL++Tf5rmr23JyHCxufeV6p+zUY/JaBERABERABERABERABC4tArs/XO/WnXPbLm180d9DkiGHlI36z/kxEiZlXOX5Q/93cOLkN37jNzZ/8Ad/sPmBH/iB7l95XrZ9/etf3/zZn/1Zlzy5b+KkXpB2C+fRArb8FX+3GI+gdQvOVK5+PXknRZXQGLe9Xfym37Ho72zYJRVG5btkxO696Ff3WLUzJE5y3aMdti/q/erX3d0h+7EY93NiHFNtxbbSRtwBE9v2HqfnYNzuNnGS5mTtHIwW/FN3wOzFoerg6P2J8Y/manos+37GbYzmfrhjJeZ/os1Vc3WsmHVZmvFvBI1iMh6LVyIgAiIgAiIgAiIgAiIgAucdgUOSIYeUPe9R9727uMRJuZOkJEbKRJR/8bWccrdJSZ6UO0/K+3/+53+++c3f/M2hXJRfvONk6k6Ietto0bub5jrBUi9s+0V7lWSoFpPjffrF72jdX/VlqnwZ62if0sWqnUic7JUb7kpI2dJ8h0ldT3k9meTIyYCJcezCtv+sWWcq2iyT2+2TALu7ILpA7Ce9qjGNY7pun1JquDNla3N3B8nE+PM8rvSURt89Lf0M191jnqfh60FprweNWWl3PBf7BlPfPBUBERABERABERABERABETjrCJQ1x9r/Dim7ts7HKhdJk/KYnz9kfw6+46ROnPzSL/3S5mtf+1r3myblzpPytZ2y7Y//+I9HCZZYYC4lTvYWv7EIzl9DaCxAHz9xsp26biFeFtVx98HaxElZ6I5/12RvsVslGbr3czuDnrxonkgcDOUmnuSkwsTb3abGHNSL9bskQQ7fZyluE+PPY2yMpfZUh2K/n7nERJuNdk4Ts9KXbGDKYO6v5yIgAiIgAiIgAiIgAiIgAuccgUOSIYeUPecxTyVKpradegwHJ05KUuR3f/d3hx+HLc/LtnLnye///u9vvud7vqf7K3wkWModKOVOlPJjsuUHY+cTJ/1ic3yHQh+CbhEbf9HPi94Uoe4OgHQLx/7CtlpIln2rRMR4n4nFb9X2uHzqTPyGSXwVp2pn8o6Tru6UbIm7KGLcE/3tvxpT3UVTyo3qmhhH7ure8778+OsyVaEqDsO7o3Yf6I6Tqs3Sl5GXqbs/cv/z82Egfd/nYtCe+64H2x//TRU22hnP1d1jttfXOlGzZzD1zVMREAEREAEREAEREAEREIGzjsAhyZBDyp7roOcSJHPvnWI8BydOygSUREj8OGx5XrbV/8rdJyWRUr7CU377pJQv22YTJ62FZRl5997uKzBl0br7KsY2AVL68ZiJk88+TV/RqZIV9SJ2aTGfxrw/znFypYvF6K6Tvu1dAqrqy1D3RMJlUDZxF0d5L41xud27JwF2fe8anf96T+1ma2UXt+Xxr/E0hGb7pOwz7mcuMdFmF77qTqQ6wbYtM653XcKvHIM7/v38jerZM5j767kIiIAIiIAIiIAIiIAIiMA5R6Bc76/975Cya+t8yHJrEiNryhyrz3dKnJS7SOLHYcvzOmlSXpev7JS7T8r/ZackT0r5sm0ucbK3eB2Nsl+I7hIj29eRtPn0s/4ug93Kcfu/ws3/u9h1C9DdYnNi8Vst0keL51iwb/u0q6cMJPW36+NE3XGnRIyp3Gmyd5dAXU8fpO4Oi9gvf62pe3uirWoco1APL1JbUXe++6Xu7167D5Q4qfuxF7c146/GOuFpCMv2yWju6zenEmPbMvNzdZ+Yjf8XzrtjJTqXxpiOk3jXowiIgAiIgAiIgAiIgAiIwPlGYGrdPbftfEey3LMyrpIYWfovkidL5e77/p0SJ3OTs/TeXOLkvoOxvwg81QjMJ3GealSMWwREQAREQAREQAREQAREQATuH4GDEid/81f+1ubf+/f/g3v9K3X8zt//vfv3XA0iIAJDBCROhlB4IgIiIAIiIAIiIAIiIAIiIAJHjcDqxMmr//2zzTH/HXUUKhOBJx4BiZMnDsDwRUAEREAEREAEREAEREAEThaB1YmTk/VAxSIgAiIgAiIgAiIgAiIgAiIgAiIgAiJwphGQODnTidEtERABERABERABERABERABERABERCBx4+AxMnjz4EeiIAIiIAIiIAIiIAIiIAIiIAIiIAInGkEJE7OdGJ0SwREQAREQAREQAREQAREQAREQARE4PEjIHHy+HOgByIgAiIgAiIgAiIgAiIgAiIgAiIgAmcaAYmTM50Y3RIBERABERABERABERABERABERABEXj8CEicPP4c6IEIiIAIiIAIiIAIiIAIiIAIiIAIiMCZRkDi5EwnRrdEQAREQAREQAREQAREQAREQAREQAQePwISJ48/B3ogAiIgAiIgAiIgAiIgAiIgAiIgAiJwphGQODnTidEtERABERABERABERABERABERABERCBx4/As6985SubZ8+e+ScGDDDAAAMM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&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;b&gt;Step 4:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;The 25- digit product key will appear on the screen. &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;img alt=&quot;&quot; height=&quot;214&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABE4AAAFyCAYAAADrvJ/9AAAgAElEQVR4Ae3dzYs83Xvf9xu08UKz0cagP0CbJLsvXtzgoI0JIXgZBkEc//ygW95oZZhNItAqhoDRD4+I8xw5CY4g8WIcfJNgsAjGWLJGMmSTCEF23v+w/4AOp6qvqqtOn1NVPdM90zPz+sKXqq46D9f5nHc9XJ+u6vnu4B8FKEABClCAAhSgAAUoQAEKUIACFKDAiQK//uu/fvjuZKsNFKAABShAAQpQgAIUoAAFKEABClCAAgfGCQgoQAEKUIACFKAABShAAQpQgAIUoEBHAcZJRxibKUABClCAAhSgAAUoQAEKUIACFKAA4wQDFKAABShAAQpQgAIUoAAFKEABClCgowDjpCOMzRSgAAUoQAEKUIACFKAABShAAQpQgHGCAQpQgAIUoAAFKEABClCAAhSgAAUo0FGAcdIRxmYKUIACFKAABShAAQpQgAIUoAAFKMA4wQAFKEABClCAAhSgAAUoQAEKUIACFOgowDjpCGMzBShAAQpQgAIUoAAFKEABClCAAhT4a3/9rx++2yPDP//9Pzxc8v+ePpWhAAUoQAEKUIACFKAABShAAQpQgALvqcB/9JNf3Wec/Nbf+buH/+7v/f3D//S//INd/x//q793+NuP/+3hd/7n//Xwt/72f3n4r/+Hv38o2/7W3/4vDqUt/yhAAQpQgAIUoAAFKEABClCAAhSgwK0rcJZx8k/+6R8c/u//9//b9f9//Af/+PBb/83/dvj9f/n/HP7T//y/P/yjf/IHh7LtP/nP/i7j5NapEB8FKEABClCAAhSgAAUoQAEK3JQC33333eGc/zcV/JnBlHE+Pz9v1iplStlr/zvLOPk///E/OfzhH/3LXf//2e//4eGf/vM/OPyL5z8+/F//7PcPv/8v/uhQtj39o/9jp3Hyp4effv/d4bvvf3r4050q/OlPvz9898OPO0u3i/34Q4Hxh8PeVs4t3+71drcOmi4O0P3a3O6o9kW2xdM49/nk9f3hp3th3ReCUhSgAAUoQAEKUIACFKAABQYFzjEIzil7i/KGIbJmnuwpc6mxnWWc/If3v3L483/+333V/9LGrld1/vSnh++///7w/Xf7k9GtRPdSor2onR9/OMsE6vZxqXa6HcSOo3FVm0g//nB4pTcVHdz8counYpx8n5yS0WTaz+ubC/Bm7Lz5yHRIAQpQgAIUoAAFKECBT6/AOWbIOWVvVbg1Y2Rt3zXGc5Zx8m/92//OWY8Glcmq/5c29hgnkZQO3+rvzNS3Et1rCLi7zUslrZdqZyPwQcsznvbZaO5D7t7iKRidBzeaTdlMmffdwNobsXMDIxUCBShAAQpQgAIUoAAFPp0C55gh55S9ZaFaBklr27XH8CLj5M/+2T97+It/8S8O/8t6bY78uT/35w6/9Eu/dLK9lNtnnPx4+CGeNClPntRPPRxVGUyVMGe+/+nhx+pVnTGx/XF85edYbvBghjbD1Fm+erJMhsdE+Icf4+mLUmf5RMGy/OFwKMlpxHQsu4iz7BuDGOL64ccy1tLuMY5FbMtXldrtjGKMTzvEmKKPwCfGkfoa+lmOJUofDmO5PX7Ver9FjvJUxkvm4Lw6hxXdDocYf38ey9gX+jZ4mvUZ18ax5XdzxvZH4yT6TJofG7ieZn96WLSdjK/F2CYG6xH5TAEKUIACFKAABShAAQrcqgLnmCHnlL3V8UZc2SjJ67H/LZZnGyd3d3eH+/v7w7/6V/9q+F/Wy7Y/82f+zKGYKD/3cz93+If/8B8efvM3fzMZCHNCv8s4WXwzHgnoUo4hEUyJ4WRYpGx/TBZnc2BKKqd6x0S6qjM/MXDcn8ySut/yeSpfmxE//nT+zYvFmMpYxra///6HuUzZ+tP8+TS+YZxT/KMm47iyAVTXa/RVx5rlHcyf3F7eOa9v9xtmxPlzkA2qPfO2rttRj415XPyeThhgiY155OPaYu6HTWM/Y5WG5sP8fj+bZKlO/m2el3JbTo4Ti0e+crstduox+UwBClCAAhSgAAUoQIGPpsD8xfWcd65t+2jji3jPMUPOKRvt3/IyDJMyrrL+1v/ONk7+5t/8m4ff/d3fPfziL/7i8L+sl21/4S/8hcMf//EfD+bJa42TOiEdEudFAlu+xZ+T8RBtSDhTufpz80mKytBY9n1MftPvWIxPNsymwqL8YEbM+yKuYVn1Mxknue1FheOHul79eXg65FSLZZyNcbT6im2lj3gCJradLNtzsOz3aJykOdk7B4uEv/UEzIkOVYCL/Y3xL+aqPZZTfpZ9LOZ+emIl5r/R5665upRmg0uz/I2ghSbLsfhEAQpQgAIUoAAFKEABCty2AueYIeeUve1Rj9F9OOOkPElSjJEyEeV/vJZTnjYp5kl58qTs/5M/+ZPDb/zGb0zlovzmEyetJyHqbYukd57m2mCpE9sxaa9MhiqZXNYZk99F3l/F0ipfxrqoU0Ks+gnj5KTc9FRCckvzEyZ1O+Vz0+TIZkBjHLNsp2vdNlPRbpnc72gCzE9BDEKcml7VmJaa7qtTSk1PphzZnJ8gaYw/z+NOntLoh9USZ3A9LPM8Ta8HpVpvqlnpdzkXpwym2KxSgAIUoAAFKEABClCAAjetQMk59v47p+zeNt+rXJgmZZnX3zKes584qY2TX/mVXzn88i//8vCbJuXJk/LaTtn2e7/3ewuDJRLMLePkJPmNJDi/htBJQN/fODlO3ZCIl6Q6nj7Ya5yURHf5uyYnyW5lMgz7cz8TPTlpbhgHU7nGSjYVGruHTZ05qJP1l5gg59fZ0q0x/jzGzlhqnmopTuPMJRp9dvq5jmYllsxAi8Ecr3UKUIACFKAABShAAQpQ4JYVOMcMOafsLY+5ZZS0tl17DGcbJ8UU+e3f/u3px2HLetlWnjz5nd/5ncMv/MIvDN/Ch8FSnkApT6KUH5MtPxi7bpyMyebyCYVRgiGJjW/0c9KbFBqeAEiPcJwmtlUiWepWRsSyTiP5rfpelk/BxG+YxKs4VT/NJ06GtpPZEk9RxLgb8Y6vxlRP0ZRyi7Ya48ihnqyP5Zevy1SFKh2mvYt+3+iJk6rPEsuCl9bTHzn+vD4NZIx9TYP+3A8RHH/8NzXY6Wc5Vy/X7CTW2qg5YTDFZpUCFKAABShAAQpQgAIUuGkFzjFDzil7q4NeM0jW9l1jPGcbJ2UCihESPw5b1su2+n95+qQYKeUVnvLbJ6V82bZqnPQSyzLyYd/8CkxJWudXMY4GSInjPY2TH39Ir+hUZkWdxG4l82nMp+NcmiuDFounTsa+ZwOqimVqu2G4TJQ1nuIo+9IYt/t9uQkwxz50uv56T83NkZVZt+3x7+Fpkua4Uuos48wlGn0O8lVPItUG27HMst19hl85Bmf8x/lbtHPCYI7XOgUoQAEKUIACFKAABShwywqU+/29/84pu7fNtyy3xxjZU+ZSMb/IOClPkcSPw5b12jQpn8srO+Xpk/JXdop5UsqXbWvGyUnyuhjlmIjOxsjxc5g2P/w4PmUwZ47HP4Wb/1zsvgR0TjYbyW+VpC+S50jYjzHN7ZSBpHiHGBttx5MSMabypMnJUwJ1O6NIwxMWUS+/1jTsbvRVjWMh9fQh9RVt56df6nhP+n0j46SO40S3PeOvxtrgaZLluLKY+3pnyxg7llmfq9dotvwTzvOxEsGlMabjJPZaUoACFKAABShAAQpQgAK3q0Ar717bdrsj2Y6sjKsYI1v/wjzZKvfa/S8yTtYmZ2vfmnHy2sGoT4GvqsC6ifNVVTFuClCAAhSgAAUoQAEKUIACr1fgLOPkL/3lv3r49/79/+BV/0sbv/V3/u7rI9cCBSgwKcA4maSwQgEKUIACFKAABShAAQpQ4KIK7DZOnv73Hw+X/H/RUWiMAl9cAcbJFwfA8ClAAQpQgAIUoAAFKECBqymw2zi5WgQapgAFKEABClCAAhSgAAUoQAEKUIACN6oA4+RGJ0ZYFKAABShAAQpQgAIUoAAFKEABCry/AoyT958DEVCAAhSgAAUoQAEKUIACFKAABShwowowTm50YoRFAQpQgAIUoAAFKEABClCAAhSgwPsrwDh5/zkQAQUoQAEKUIACFKAABShAAQpQgAI3qgDj5EYnRlgUoAAFKEABClCAAhSgAAUoQAEKvL8CjJP3nwMRUIACFKAABShAAQpQgAIUoAAFKHCjCjBObnRihEUBClCAAhSgAAUoQAEKUIACFKDA+yvAOHn/ORABBShAAQpQgAIUoAAFKEABClCAAjeqAOPkRidGWBSgAAUoQAEKUIACFKAABShAAQq8vwKDcfLzP//zB/9pgAEMYAADGMAABjCAAQxgAAMYwMBHZqDYLD/72c8u+p9xwjRimmEAAxjAAAYwgAEMYAADGMAABj4FA4wTIH8KkD+yeyl27jsGMIABDGAAAxjAAAYwgIHbZYBxwjhhnGAAAxjAAAYwgAEMYAADGMAABjDQYeBmjJNvD0+H5+fnw/Pj/aebrGlsZXzPz4fH+7t3G+MUywV1vn+8/Xm7+/ZweDrqP3D29HD4dvd+87DXTb7GfO3tW7nbdbwvMTd3d98OD0/jOWk4Jt753HSJMWnjczNrfs0vBjCAAQxgAAPvxcDVjJMpUa0S1CHJbtygR4L49PDt3UyFa0zC3f3j4fn56fDwrZ2kh04vNVMGPSuNYxwtQ+MaOrf6iRhuZTnqfDoPd3f3h8cVw27U6/Fw/04myzXm6zVzEvH0DM6R9zkZf+nxfKl2yli3Yp72h7FWHU91LKvH83C8z+Ovj+s4/73GqNgbT11ubS5eex56DVPqugHCAAYwgAEMYAADGLh1Bq5vnCTTYEpSG8bJrQv10vjWjI3S5msTliHpqxK9iPWtDI236ifG9ZJlzzgpbY3J7Kk5Mn0jf8Gnc14S+y3UCU6fHu7HpxQamkSiHmbBXOc8M/Ri7RyfMlqLeTRN5rmfzlGN8cU8jHVOTbgeR1GvPk7qcUa5c5eteOq2t+Yi9sfcnRuD8m52MIABDGAAAxjAAAY+MwPXM07KN69PD4eHx/nVlHIzH0nMV7lBr5OlGqbXJiw94ySS/rVvmetYXvp5a4wvbfeS9UadT5Pd0kedZEa/r52baOejL0czYdQuuKqfOOltH9joGHstXS7XTnmS6GUx12ZKHWeYK/kcNjI0GzB1ndbn3lhbZde21fH02l2bC6y70VljzD58YAADGMAABjDw1RnYa5z85Cc/2f0ni4c/RzwkEiVhKgbK8dvb+8eSyIzv1UdCH0lrPLoeZVsTM9z4x+P06UmWUnbqL169OJbLyU0pNyZF86P0rf5OYno+TYj2tFP665kKJ/WncZXYTvtr6TGP57R8JE97dc7lF7E1kt5TfU5/42TRRhlb+ga/p8k0ntTnaV+nY+1pk7evGifBTIpxiqWai5N4qjrD/iH+4ytAHQ5P2jmznxjbms7nzGm0t7WMNvN8ljqtxDsS+rVXW+r+LtVObrcXcynTMhNa2xbtHZ9kyeeWUieOtVx2bX0trrV69b5as/pzKb81F606dT8+u2HCAAYwgAEMYAADGPiqDOwxToppEv9/9rOfbRoof+knv3r4bplAPh7uS7IxJJRL4ySEX0sippv+nFCXHzZ8mH9INieikdCMSeWcaNefp3ZT8rsngdhqJ8cyGUJhjKQxlLHv6S80ai3HvsYxjuNZfsseWkTdns7T9mRyhD45IRz7G/uINmsjZEuftcQ0t/VabSK+shzbWsad9w/9JvNi0iOzMfx+xcxT6JNNhDz3of2JHo3EO8eS11txxP6TdisDaKq7MafR3p7l1GbSpdSruZjm7mH8Ud7QYquPS7WT++nFPMR9nIvydFz5seBR0z4npU7Nb3DweL80y6LNHEtej3r5+Mr7966fxDNwOo9hz1xMZd7xh6v3jlc5N2wYwAAGMIABDGAAA2/NwJZxEoZJXm6ZJ4NxMiQgKRl5fCyv6Xw7RBJTJwuxPSehIUadIMb2vIyENSdoOVmOJCXvL/VPErUq6ch9DOWPyelWO1EvGwGxLS9fm7CM8R+NkyH28Zvv7njjL2nUiW9sr4ydHH/MUT13yzJj8rimT2ZjOUdLU62em6zbueu5n1bdmp96Xnpjr9ms2yl91X2fM67otz4uuvOb+J3qrsxpS4u1bVObNT+538GMGBP3Wse1tgetLtRO7qcXc5SZ9g/m5myMxf45rnhSbTYlhn1hWG0Yb7m9sj4cN9WTc3WZ3ufgbDRmq3heoOG589SLy3Y3MRjAAAYwgAEMYAADn5GBNeOkNkvqzz0D5cQ4qRPHnGiHqFPyUiVkZX+rfNSL5ZhItJOeUqaXrNYJwxTHkEQtE5Jz2om4tmKv+496e5dZ2+FVqIfx1ahuYh0GSaXzNO5qe46/F+uiTEra8hhy3TxXo/EQZk9lnESsnbnI7W+tZ51aZUOvMChODJEpOY7kOS9n7vLYWv2UbZPWO8Y1la3mZQ/Pvbp5vnox9rb32pziKfwlMyDPe6/NvP1S7SzaDI4qDUuZiC/MwEGb5/XXbuo6wc6aWZjjKet7+qnr9D6fxBPH4BlzEW3UY+j1absbIgxgAAMYwAAGMICBr8RAzzjpmSS97dlEOTFOakFbiVs3IVtJenK7WwnrlJBVfxa4lzBM8VTJ7bnttMa6iPuM1zZyvVgf4y8GTzEdSgJfnviIZcP46eg5jbdKLnP8Pa0WZSJpW9F5jvnuMJg99/EaV+dplYi5movQYM8y99krP4xjeDpjNHDCRCnle8lx3dYWh7n8pPnKuKYy1bzs4bBXN89XjmfPeq/NYKP+fZ5enL2+LtVObr8bc3BVaTvok54eyW3F+szK3cRGmC9Rpjf2bBZG2dcuF/HE60fVGHrxlL5Dd8aJG6DXsqg+hjCAAQxgAAMY+IwMbBkn2RCJ9TBP4nO9vKhxUkTfk8iMScH8zX89Wb3EYLNelVyd284Qe5WY5dh67eUya+tj/afDQzEfjv2UPsffW7iwcXJ86iIniGEohMnQG0/WeaxTYrs/PE5GxfFzelqhHncvAa7LtT5POlWGTi47JZZFy+pPZu/tO48zt722vtZ2b98+nU8NoBLHFpMvibUX52ASVK8KvaT9c9vJffRiC3Yzz6XeaGycHju5zUHD47h67Y/tLM9JIx/LH0vO7b50fXc8nbno8fTSeNRzw4QBDGAAAxjAAAYw8JkYWDNOakMkfy7mSf6c1wfjZC05a+3rJR9F7Lipj+R82FYMjZMfh10mKfVEDf2mb2F7iVOu1ypzTjutsbbaz2PL+7fWI77yWweRAI4JW/uv8/R07m2v4x8+Twlj+jHMZA5t6RN9PT09LWMun9P81GOPscY46/1rn3cZJ4vXcU5ZCl3XvpV/mXEy6tgaV2jV4mOvznXdek7XdKv3rcUTpkDoE8dtfM5tjbG3DYRLtRP99WKetifmgrG1H3at4yv9jNtmsyXayXMa9er5iDjzck2fXG7ue/6z761ta3MxlH/lk291TD67UcIABjCAAQxgAAMY+EwM9IyTbIScu77PODkm35GMnvz1merJg0hE5nJzklImZExKTpPderKmhGR4PWI2G6JcK56c/ES5rXYW5ZKpENvzMpKaeWzb44j6sy6zHnN7czutcY39jfWmJLKKdRhn2jaVO+pXkuKh7VSmxLalz7i/EXP6RrwVc2suQou15ajJ3F+v7BR3NZ4o34opJ8J7OGy1UY+rVSbPV8QzxdvgeZqraixDnWpbtNdb1v3MrC41ncyBxEfd5hRXKdOJ4xLt7Il5Ecsx5jqm03bm4yqPrZ6zPKfNfqK/3tNNHX32xrNHw4g/zhktkyvKWLr5wQAGMIABDGAAAxj4qgxczTj5qoIa922eTPYaJ+bvNufPvFx3Xhgn19UXv/TFAAYwgAEMYAADH5sBxsnPf+wJdADumz/GyT6d8PQ1dWKcfM15d7ybdwxgAAMYwAAGMLCPAcYJ4+TwFQ6WSAynV0zSK0FfYfzGuO+E+JV0ar0+5FUdnHylY8BY8Y4BDGAAAxjAwF4GGCeMky9hnOw9IJRz8sQABjCAAQxgAAMYwAAGMICBzADjhHHCOMEABjCAAQxgAAMYwAAGMIABDGCgwwDjpCNMdpescxsxgAEMYAADGMAABjCAAQxgAANfk4FinPzRH/3Rxf6XP108/DliQH1NoMy7eccABjCAAQxgAAMYwAAGMICBz8QA48QTJx7HwgAGMIABDGAAAxjAAAYwgAEMYKDDwJsaJ3f3j4fn58fD/d3dWRNyd3d/eHx+PviLD+uu5beHp8PwV2Me78/S9yM4gdPYnp+HMWJhnYVrzek0D5+EsfGcNDLVO3b2lLm03q/RefprOZ9kji6t7S20d//4fHg2P5/uOnULbInhfa6NdKc7BjCAgc/PwJsZJ/HnYJ8evr3oZikSidcmzMMN6zH5LolSq706UerFHDH1boCn/S9M9kOz5+pP58YY6tijv168H/WAHufj6fDwrW24hU61HueOd0o4Jz76fZ7b9q2X36vhR2QsYq6Pozwn09yvJLN7yuQ2X7MeMb/kWD4nzr3z/pqxqHt6I8E4OdUEJzTBAAYwgAEMYOCWGXgT4ySeGOkZDHsFGpOJ859Yifbrm9UwSHLCXW+LxCInMPO2+8PDU/ubw9HcmGPdSv4jxryMfp6f5wR+0rJj+uT6n2V90LIyj/LYQqc8j3n/nvVJ19TPkIA+Phy+nfmE1J7+bq3MJTS8tTGVeMJEeHx4ODyl46iONcqtnaP2lKnbfY/P58T5Wef9PXQ/p8/6WnROXWXdVGIAAxjAAAYwgIG3Z+BNjJPXGh4BxpTcrnwrHGX3LOsEo/4cbeTEfYxhNDJ65SPOnMj3ykYfreVgtjw9HB4e5ydjyranh9Gwye236n+WbVtJxiWSvzzHn0W3c8ZxCQ3P6e+tyo7jKsfrt8HkzAZojmHP8bmnTG7zvdbPifOzzvt7ab+3361z2t52lHv7myaa0xwDGMAABjDwNRm4unESJkIvYQnwhhvJHa9IXMqEKf3WCUYriYj481MfEXNdf9r+rf3t9hB7eqIhyveWYZx8K78NczSL7h9Pk8DxaZb132mIPtZ0nvo7/qbM8JsPjSdbxjlY7+8kpsZv2+xpp8TdSzJO6k/8lNjmp31i7L1lzPEWo6X+SZ+VibelYTBT+lq01eBisb+M7cy+Yrxr7Zzs62h4Mp9VLHv6Omfs0d5rl8P4jtrm9brdiK3WOJfbUyaXr9e32Cjl9+q8PI7nY7FwleNczG9ibLF9Meenx85JTGccW6HBnrHvHf+eeE7KVLxuxTPWn5/0m8YxnNufD/lcsdVXc1yN4zn6sPyaN2Pm3bxjAAMYwAAGbpuB6xsnww/Cnt6ABhiRtObfHxhu/B/aP3DaMjeirXOX0XfcBNc3y1Nfw2P+81Mf0U9OUGJbWU717pe/yTEmK2ck9EW7IdkpP477eLgvN+3D5/a35714hpjCDEnJU61zTgDiaZY65vpzaJgTzt74s0Zb7eRYwsCZlmkMa3rn/tbW98Rb6m/FPMQy8D4msi0NpzkqidNxHNO2lNxdoq+IJ/gePh85yNuG7ceEMGIu21r/W7FGua2Yp7opaQx+6niizdcso79oe5zn9rkoymaO6773lKnr5M+Z6dC51izKr/VV14l2o82p7oKx8Qe2Q4upn41533tsRHu9ZcSYf1eqPY75/Bhs5DnZE8/Y10Y7m8fpqFfuu4ztRTE3roE9M7inn+3t8xFd6IIBDGAAAxjAwFsxcHXjpL7RrAe2tb8uH0lBnQDU5fZ8Hr+1nROp8YZ7/JyTrN7NesRS31xP21OCH22c8yTEoM2xjbL++Fhe05m/Ua41mPpNCXjosEfnSG4iASt1Fzp0/rpR1m2o00gUIo5h/852os5WkhHa5rij7p5la9x1vUji6j7aY1+abEsNR9MrTJPoJ8/PpfqKtutlS8+9GvYY2xPzVDcdFyW2Vjx1zC/5nHUv9SPG+rgZ9x3npXHsRN9T/Ctlomxr2eKsjjHq9fpqbY9tMa74XDPW0nlr3mu+I75zl1tjj5hjDNF+Pi7Ktq14zmunf5yWvk76vlsysqevXpnWXMSYLd0AYgADGMAABjCAgdtj4G2MkypRyiCcewMZN6K1WZHb3LM+9PvceuT66fDwUP5scjJUOt/KrsUSSVp+SuK+/LngFS3quIcb92P5OsFq6bYWT6t83d+YlMzf1Lb3z7rE/jr5muIo33gnHafyHWOlbifKb8Xeqxf1t5atpK6u00vY6r43NaySr+gnt5/XY39ZnttX1A3WJxbTEx9Rpm47ttfLaW4r82BPzL26W/Nbx7D3c534lnpDX41jsBdb7mtPmVy+Xt9iI5df66se19jubAL06rZ03pr3qa3OsZxjXlvfGvvJ+XLoL15Bms9JW/Hsbmc4B83ttmKvtRk/z+e/PX3VbUQ/rbmIfZa3d6NkTswJBjCAAQxgAANvY5x03omfboKrJGwNzKhTfzO5VqfeNyYeS9OklImb3PqpkG5S2EmC6/7i87k3y9k4iTZi2WortKlNpd72aCuWm8nNmYbH1G+VdHX17BhUrbFGzGUZ81Y/DZLLrK1H/TWm9sa8qWGHmdx+Xs9xR5wxzq2+St1Bu+r4a+lZt537zevTnFbH7J6Ye3Vb8eQ+X7I+9bVIwCMRn5PfaHsqX40r9pflnjK5fL2+Z76izlpfcf7KRlgwsRZnS+ez5706liPereXW2MOEyONYa3PSp4pnbztb8UTfWbP6fLynr56+ud3oy9INGQYwgAEMYAADGLhdBq5unPQSqoBiuIGsErvY11r2bkRbZVvbxnhOf2izlJ1uxqvkqb5hjnZ75WN/Xu65yc7ly3qv37KvdeO9Fs8enbeSiZ72m/Uqs+DcdlpjzVr12stl1tYn3RpPIkS9Xh/12OvPUT+WU18txo7HweX6av9OQ0vPXp8Rdyx78ffqZ75Q1toAACAASURBVD16dVvxRH8vXXbj6f3GS8Voq99e/K2yrW1Zi9b+vK3XV2xfMxiiTG2gtnTu6ZRjyeu9tnOZ1vrW2F/cbjVve9vZiifGMJcbX9PJuu/pK8772ZSNbfX8RJ+Wt3vDZG7MDQYwgAEMYODrMnB946STqAR0ceOebyKHG9LOj8OO37auP2IdbdfL8Sa4bZpE2SgTN8gRX3yOcmW558Z5KHd8kiLfPOd2euutRCfKtvatxRPjWNN5ThKWP2obfZbl0G8yuiIJWBtbq8w57bTGmmOK9vPY8v496119Hh8O3+5GPfbEvKVha46i76zhRftKhtDY7ukxsFfDVvyh71bMvbpDvcpIKm32Yo3+1pa9eZhiSJqUdqbtjTiinz1lomxr2YupWbYyBKLMnhh6ZVo67533uf/2j8zG/t5yz9jHc/v8ylGvrbw94s/Hzp529sRT+on2H4cfCD+97uzpa9D9yFu0Nzwt1GDtNcxnXax/3Zs6c2/uMYABDGAAA9dh4OrGSZm48Wbw9KYzJnVxM1k9eh1lyrKXEOQyvfWpbvPR/eXN+nhTHY/1L/eV9qeb25O25lcA4oZ6fJx+3t6Lr7V96Kdxcz3FcLwZX/Y1x13/vsiWznuTiXr8OWkpsbXiqctMY0gatspM5To6lP3lf5gP8+sLfd6iTr3c0qeU3xr7loY9DlvG3Gv7aulSNB7mp6HnmoatOW2xvRbzNPaq76FOtW0qW/io9tXz1vo8tFmZI1FuHMt4TO4Z154y0fbacouNUndPX/X5aWL+qNOkXaVbS+fS57nz3jtOXzv27vjTOFr6tOJplcsc7ZmLGE+01epnT8zTfBzPdeVYH9pM4yrtLMpV+yIWy+vcCNGVrhjAAAYwgAEMbDHwJsbJlJC+8mZwvIE9PyHeEsF+B8pbMTAlR688Ft4qXv3c1rERJkedxMf2lgFnDm9rDs2H+cAABjCAAQxgAAMfj4E3MU4KGHFjX9/w74Vm/IbwZU9u7O1DuY8H8EebM8YJxl7DbO88OprKzo+v0VZdxyYGMIABDGAAAxjAQI+BNzNOSgDnPB6dA44nVnybCuTMxUdcZ5xg+LXctl/VYZq8Vlf1HZsYwAAGMIABDGAAAz0G3tQ46QVhO0AxgAEMYAADGMAABjCAAQxgAAMYuEUGGCfHHxe9xckRk5MGBjCAAQxgAAMYwAAGMIABDGDgfRlgnDBOhr9K40B83wOR/vTHAAYwgAEMYAADGMAABjBwmwwwThgnjBMMYAADGMAABjCAAQxgAAMYwAAGOgwU4+RnP/vZRf//pZ/86uE7TtltOmXmxbxgAAMYwAAGMIABDGAAAxjAAAb2M8A46ThKINoPEa1ohQEMYAADGMAABjCAAQxgAAOflQHGCePE41gYwAAGMIABDGAAAxjAAAYwgAEMdBhgnHSE+axOmXFxgTGAAQxgAAMYwAAGMIABDGAAA/sZYJwwTriKGMAABjCAAQxgAAMYwAAGMIABDHQYYJx0hOG+7XffaEUrDGAAAxjAAAYwgAEMYAADGPisDDBOGCdcRQxgAAMYwAAGMIABDGAAAxjAAAY6DDBOOsJ8VqfMuLjAGMAABjCAAQxgAAMYwAAGMICB/QwwThgnXEUMYAADGMAABjCAAQxgAAMYwAAGOgwwTjrCcN/2u2+0ohUGMIABDGAAAxjAAAYwgAEMfFYGGCeME64iBjCAAQxgAAMYwAAGMIABDGAAAx0GGCcdYT6rU2ZcXGAMYAADGMAABjCAAQxgAAMYwMB+BhgnjBOuIgYwgAEMYAADGMAABjCAAQxgAAMdBhgnHWG4b/vdN1rRCgMYwAAGMIABDGAAAxjAAAY+KwPXMU5+OHz3WQUzLicDDGAAAxjAAAYwgAEMYAADGMDA12GAceKJE49jYQADGMAABjCAAQxgAAMYwAAGMNBhgHHSEYZ7+HXcQ3NtrjGAAQxgAAMYwAAGMIABDGCgxwDjhHHCVcQABjCAAQxgAAMYwAAGMIABDGCgwwDjpCNMz2mynQuJAQxgAAMYwAAGMIABDGAAAxj4OgwwThgnXEUMYAADGMAABjCAAQxgAAMYwAAGOgwwTjrCcA+/jntors01BjCAAQxgAAMYwAAGMIABDPQY+BDGybeHp8Pz08Ph293dRRywob3n58Pz4/1F2ivi3j9etr3ehLW2X1qfVh+2Xf4kcg0O32ue7u6+HR6e3u8Y2Br3pHU57p+fD4/3lzmXbPV7jf1394/DGMo4hv8r57Fp3CtlrhHja9r8iDG/Zry57lcee9bhq61fat4v1c6a/uecf9bauea+97wfu+a4tH35+zCa0hQDGDiHgasbJ1NCFTf5z0+Hh2/nJS13d/eHxwsmO3Fz8fTw7VMYJ5fW5xyAemXvvj0cni44Z91+6iSyw9dwIzUxeBuJ8zU47Ol0ie1rczod5zeYoI83+v3zztq4LqHbtdrYo/lHY6xo9RFjvtQcf8axX+r4qhP23vU7NGx92VK38dy5XuyZz7qtXjx72oqYX9PGWx87vfPPtD1db7cM3j0anVPmmsbJGs/T2KvrYNx/fGTD/hz9lZWIYgADn5WBqxonkdDnG5jhwvJ4/tMj17wQXmJy3zu+9+6/1nDt5qIue8nP4w3oMkmutYkbXjcx553Y1+a0d8N4ybl9aVvD/K88sbY2rpf2+Rb1blnztxi/Ps47ft9Lr0scX/V5fbq3qBLUOCYeH4pxv7wOtMZft9sq09pW1+vF06r7WbaF1vWTu63twUBd9lpa1Nf8S/YTY2ndPzTHfvxyp1X+knFp62OcD82TecLAx2bgqsbJVsJyDjxjsrt9I3ROm5cse80L9Z44b02ftZuLPeN5aZm4gV27SWne3AxPyNwuXy/V45L11ua0pekl+35NW1vH5tq4XtPvtevesubXHrv2P86Nx2uPrzin109jtK55Y1/lPD6+OljXqbmJtteuF706dduteOq6n+lz7/zT216bTdfUYuuc/5q+13iuxx581ay8pn91P865z1yZKwx8PgauZpyce8EYL6rPh94FJi5Irf1rF8mh3eO3zeONzfF3AcpjpJ1vq0ofEc/wiGnj2+qTthrtLdqo9u+NuRx0p309Hu6r33tZ0ycO3LV2xlhPjYPWTcJ2O0njxeO6y7hP2knzMewruserOGX9+PrP8/OynRjfoNWOV4RCq3r+Y75aN9G75qvEuiPmtXHnsZT1od9Jw9P5qcvnzzHOPTzH2Fu/m3Gyb4qnzPM4F9FX0XRRvnHs5Bh76ycaNeZ80U91fOV2e3N3Ur8xrl7d0v5QP43vpL3Ecyk/MX189TC0rnk7GXvVTowtax7bYrm3jVJ+i7G1tiKGPYydtFPN6cn+atzn9LUc03w+ytePk/6qeIo2J2XqmOKY78zpWP/0uI3zasSz1U/M62vnK7eztf4iDZM+J8dD4/jaiqHs72rYeIU3H5N5vddPzEMcg/E5zmtRL8ZS5mtvPEO54fwwvmrcOt73zvvWXGy1c86xE2ONeOvrZGgSbdb7u9uHa/l8LOzRp/S1J56T8afrQS+eQdPEa4xrqfUc70kcDZ5zX3k92s7Lk5hTLGNfc99RL/gMXmO75edLzsypOcXAbTJwPeNkRwKboYiLUtxI5n2xPpY5TZqHC11KYKJ8WbYujr0L2rR9cdEdb3pyXOMFb3lRq/upYw0jKW4y9sZ8zoWy7jPrsNVOxJfHOemXtN1qJ/rcKjdqOM9l9B/6TDcVpe/j0yBPT4+H+w2u1nSdYjvecNdjLfunftNNTEuHaGva93g/190Z88Rb1dcQRyRiWfvyA6wP+3/QeGq/8HxsZ9qW+ixjzlrEXORtQ0wr2k/tLvo6PXaybr31LXZKvZr1iPmEn8XN7TGBTppujWuNp3zM79FwYiv99s/JOIbkon9cZM0mzdNc5v3D2FZ+tHfSLOkxtJkYG2PuxzPFsHXOXGFnb8x7+2pruvxdoz2MbY190HeYr5GrSGZy/5PG1RzlMnn80xir8uNcHhPwV8xX7mttvY4v2I0xDvHsZHWP1ufEEmVDqzhPnXw+XjfWflOtdXxHvFO7R3bjc61NN54NNqJeWUbscf7K++r+WnMR5XvtTNu3jtOd14K1mKe+KoZ74ygGTXBVl6k/t46nUY/+/Vgvnnz+HsezfXwN5VbOZbmvIfZ0rMYcDW1sHDsxzmAu6rZ4jX2Wt5lkmRfzgoHPxcD1jJPjTUNcEC8BTlxM6jbzBWq86RkvonERqy8+sb2+SZm2Vxe7fIGNMnWbyzLjBbiOM1/g98ac62xp2NOn1NvTTn1RbrW3p52hvx03F7WG+SZp7Ge8oco3sv2Y4lvl5Q1US7NhnCvvv0d/YTaUNvbM1zkxDxqtJLVZi9YY9mwLVvM4prE0vl3PbWaeY3voUnNd9vf6arUT7fWWW4y1GBhiGM45p/O/FcPauPbMe28cdb+Zj6gz9r1+vuqxMGleJSjR9qDJKxiL9leP02h/5Zw5xNGZmxxrrEe/rzk/57rRXh7HNmPtVz3qudia0zKmkzqhWWPeItYcf+hStxPbYxl18zhb/Uf53jLayTHEtmi7/hxttWJcO76i3tpyaLPiq5SvY8jH0ri/bdzGnI1PVJyeL4a6E6/HZDrN1e54GvdAdYwx7hhL1jyPMW+PsjEX0Uav/GJ7pWN9jsptxXqvTMSRY1v0lTQLBnLMMQ/5epL12XOejxhyuyWGHHOUqePMZUqdFruhQV7GWHLcsX/qazDsO2wdj/865rr/Ib40Xz09om/Lz5WcmU/ziYHbZOBDGScFovpiV7aNF+DxW9Hx4jO+8hMXsfoCFdvrC2lve+6zd9FclJluupZ/PSjX3RvzFNPKhTgfXDmOvH1POzm+Wtdoa087Q91V4+R4MzqMKQyPWI7zOOpzTChTW1s3DzGGes4j/kGf5/4rYVEu+olHtvfM17kxT1qmG8zovzePsX/Pstd+jjPaCV2mx7PTN5NRJrRdvWGsxvKScUxxd5hvxV9i7MW3FUOv3tDmcCzvO7dsaZgZCk3zcmYujoW8nJ/6iDqTTpXmsb8s18ps6hJPPa0dpx0ToG57iqMzp3tintqoxlv3VScgo+7zt9oLXTrx7J2LrTkd+krnr/nzelJVX5tKvXqcZVv+vzfmXKe3vqXhOX2tHV+9/vP2OpbYFzzEub5VbtAsJZ9RN5YRW7QR28tyqDvwsTz2Wv2U8nU8e9iI/qJua97r/lo8b7XTa7/F1DzudP6pjrk83jrmqa/qvFFfN7b0GfefHicxZ6W9vB4alGUe1xRPNYZcpq6T26rXe32WcrmvUcclO2OZ7fufoVx93kjXojomn5fnQnrQAwMYuBYD1zNOjif91g3JawYzXrSWF9O87f7x6fBw/3B4Gm6WxgvUyQW7c7OfL3o5xnyB7V00F2X2GCeDPuM4zoq5c6Mf8WYtYlteTmNstDPtO95glDH15m8q22in9NfTadjXeDc9xziUSRrmtuKGvZ7TXH+Yi8bN8ngD2h9TtBH95Sc1sq69+co3etHGcHPXGe+kYXVD19se8e1d9trJcZa2Br2qJ1Ayz9FfHlNsi2Wvr1Y7UWdrObVZMVbHH+304tuKoVevtDvu2z5O92g4xn16Iz3F3+Ek9tfLSZ+Kn1yuV6a3fVm3ff5clhmfzKiTp57mU7/VnO5pc6pbjbfuK47zbAL2zhdTm1U8e84zJeatOY1x5RiH+Brnp6G9M69N0f5Yd3u+cvm19S0N9+ozxFUlgGv9tvb1NM4xLOcxJfzVvLbaH+ammo9le8tjdk88w7jPSHSn/iq2Sztbc5HH1Guntz1zWdoZPu+4FgzjewWrQ/0NfUadl/d6Q73EU+/cnce1Z+y9MqW/+n+vzyG2pMnU5glb+47Tqf6RiTKm3v1YHaPPp/NGE5pgAAOXYOB6xklcQKqLxmuDjotJvoCMN1DlAnt/eBz6Kzfzx8+NVzKijfpmv7d9eREeL3qn/c8/Ntu7sOYbrnNjDt16Mdb7c3yxLy977cwxlnEubxhz/VjvtpNubqJsLHt1Yn9Z5pumrGe+Wc7l8/owXxV3Y3vzHOXyeb1Xbs98nRvzmg7DGHbon2Ov13vtjzfi49yGnvWxkJmPdvM8xLZY9vpqtRN19i7rtntxjPqfMrsVQ6+9Et+ueY8nM6qkp+63F1/oUI8ztveWe8qvlRniW2FsrW7E1CtTjz3Kx7JXr+zv7ettz31FmZ5REv3Xy6gXx0H9uS4fn7fm9LTcaDT14lvr9xLzFfGsLSOGXoylbpQJvVbbW7kWrNWLfb3jM2vfLXM8Nteuh4Ou1fViPkeO1/tTE335BNOgSWUE5PhiLL1lT8/YvjYXuc0oX89Lb/vy2DmOdeM8Fv312uxtj3qx3NKnO6dJ57h+5fmNbaFBK57Wtq3ja4p7hee63RhDxFLaqMtEu63lrNG++7FWG7ZJFjGAAQxcjoGrGSdlkroXjceHw7fqr8LEtyr5Atib6PmmZnwVJi5ET09PkyM/lCmfG4lBlM8XsyHeMHs2bhzyjdZ0kS7fbKV69UU4ysX4Ioa9MYcWdTuxPS9rffK+WO+1E9uHb2vTeKJevYzyMa7YH9uzJrGvLGO+ezeE4w3D+G1TcFTKRrvr9ZY3tWNby/nJscT6Wkx75uvcmKPNlkYx5rxvKJ9+uDPi7i1b7Ue7MV9TmZQ4jOye6hXa55ii76mdipmhrWpb1Nm7jH4j5lJv6/jKbW/FEO2vjWvtOJ3GvqHhfBO8fIUvx7rGYC5X1qd+V/RdKxMs5HEP5RNjW/H02t+reZ7TGF+vzd723FevTLTdWwYDOZ6tsQ9zkJK4XttDuXia6OGheU2KumvxX2K+op+15VoMud4efUr50DZzltvZsz4e7/PTB6FFzFfv2JrGko7N3F9cG/L1pN4Wn6OvUn8rnlKmF1PuP9anOKtjubc96tXLXvne9uaxk7Qax3l6LSj99trsbT+JdcexM/Y/m+HB0slcHGOO/fX9y8hqfFlwfEquumcLpjKnw1jS+XAcd9tg6mnS4ufsY6eKtdbS58slRbSkJQYwsMbAVY2T0vHiQrby2GxcSPIFsRd4tJlvdno3MvmbougjP8I9rh8T9J3GyXRjMIxnTNKHtqubnumm41iuHttLY67bqXVq6dMae6+dsex8k5rbP6ed6UbkOP74vZBor9VW3LSMNxvbxkmtcd1HPVf13AdDY6ztMUe8W/O1N+bmuBvHRszjHPN6fBFnLHtjjzFP5Y7foEU/hYshxornUr43p1NfVZ1Bs2pb9NtbtvRpsVrPfatM6WNPDL1xTfXTk2tT2ZRgTNvSsV5ruDeRao0/josST3N/xc+eMqWtPYw12zrO6d55b7VRz1erzIvOz0NCVr+usUz+Wn3V8XS1TjzvndPc1u5+qjm9xHyVNvb8H8e1rmEeU5w7hmXSJ/qqj4/6PB3l1pb1nOXz2HCMp+MxtzPWG8+d9TmjjmMadzWGqJf7XIun9L+HjbqNWcf5XD/FdDy3TGVSjFvt7D1O63kqrA5tX6CvPCd79SnlQvsYd338TGM76lPmqI65LtMa1xBTPD04aT3PQ46/1ik4mvpJepV6MT859tgW4xqWVb25bjuOHJP1fec2OtEJAxh4DQNXN05eE9xa3bUbpbV6X2Xfa/QZLuidm9Cvot9nGGfvJu4zjM0YXPhaDERCkxOUUi6258S3Vd+2WSsavv8xFtyai/efi/c6N7gf+7pz/17M6RdzGOgz8GGNk/GGggvfg/ul+ozfbtG1p+tH2s446Z/4PtI8inX/PPYSzfHbXee1PSzRcD9ve/R8TRlzcTtz8Zp5fGld92Nfe/5fyo16uMHA9Rj4sMYJKC4Lxfw4rOTis7DFOLnsMfJZuPjs42i/2uC8ds680/B2zh3m4nbm4pxj6DVl3Y99vTl/DS/q4gUDb8cA42TnO9+gfDsoaU1rDGAAAxjAAAYwgAEMYAADGLgVBhgnjJNdPxZ4K8CKw8kTAxjAAAYwgAEMYAADGMAABt6SAcYJ44RxggEMYAADGMAABjCAAQxgAAMYwECHgasYJ3/lh8N3b+n+6IvbiAEMYAADGMAABjCAAQxgAAMYwMA1GGCcdByla4itTQcxBjCAAQxgAAMYwAAGMIABDGDgYzHAOHmFcTL+icvnw/Pj/aseabpUO2sH38kv878y5rW+Xrpv+CX5G4zrpeNR72OdDM2X+cIABjCAAQxgAAMYwAAGWgxc3TipE/anh29Nk2EyD54eDt/u7hZl6jaen1/+pyXrtnrxtMSqt0XMr2mjtHmpdur4Wp97f6J22v78fHjO/9/QyLimcXL37eHw9Px8eLxfslU0msZejTX+JGCrTktb25xkMYABDGAAAxjAAAYwgAEMfD4GrmqcjIbAbHLc3d0fHktSXiWokbg+PpTkdi7fA65ut1eu3l7X68VT1/tMn0Pr3hzk7WE25G3X1OKWjJMw2Jgmn++kd02GtY0XDGAAAxjAAAYwgAEMfD4GrmachClRP40xJqRLc2RM0Mu2b4eHp+dDXacGL9o+J6mNOnXbrXjq/j7T53OMkzLu2my6pha3Ypz0WLnm2LX9+U6u5tScYgADGMAABjCAAQxg4HMwcD3j5P7x0HqlJpLSbHoMyfnxFZ283oMsnoSINuLz8/Pj4T695jMm/aMR0zNI6niGckMsx6djjq+tRF8lprGt9EpL9QRNxB2veixefXmejaGtdsLkKGZPjGVoq/E602J/46meiCnarJ8i6W6v5nGPPqWvPfGcjD/F3YunZ64stZ6NuZM4jvM5zsnIS+4rr4dmeXkSc5r7sa+576gXfGaGYp/l5ziRmkfziAEMYAADGMAABjCAgc/LwNWMkzGJXBoZBaRITOPJj5PPw29RnCafGcIhSa7Mg0hOp3aPv2kRn3fHMxgFoykSie5W3dqEKLHWdSLhjjbzeEKDup1p+8JQGA2dGNeg6f3j4imdMINymehvajMl/EMbd+PTPnUMvXEU4yHGUpepP0c8ue1Rj+U8Z1OkF2cuM8Z9NLgSD0Pdh+UP9gYfEXPoUY99iD21tSg3sDEzXY8rPte6t3jN7Vr/vCdYc2tuMYABDGAAAxjAAAYw8PEZuK5x0khAIyGO5HJMaOcEupd8hvEwPikwl88Qzsn46W+p9BLik3iOxklOsOsYo8+omw2Bsq+1PbbFuKONXvnF9krH2jzIbcV6r0zEsSvmynwaYtrQJ+Yv6zfXG+ctYqi1yDFHmTrOXKa0W5s0Mf56ucs4GZ5G6bB1NJbqmOv+h/jSfPX0qOPz+eOfTM2hOcQABjCAAQxgAAMYwMDnZOC6xkn16kyBKBLiSEDrxLOUqZPPGr5IgqONvH+oOyTA85MBZX+rn7K9jmc0X5Z1c/t5PerWyX2rvzB+akMhx1C302u/Ng9KG/O4118h6rU5bV+8yjI/VRLj3tJnNq+Wf70m5qyMP69Hu9MYjk/CTPFUT8bUY68/5/byeq/PUib3Nep4Ov9hgIzGXdK4Yq3uZ0uvHKP1z3mSNa/mFQMYwAAGMIABDGAAAx+bgasZJ72EMRLQIYGO10OqZH3tqZIAbkhw0zf7ZfuUAFfJ7LCves0i2snxrJWL8nk59Vcl96XMaNQsE+yWaTL0GTpU7fTar82CVrJfl4m4e232tke9WPbmdbn/9KmNbCjk9ahXljnmXjx7yuQ2Y73XZ9mf+5rWT9gan2LqzeHUTzWXJd6WwRflLT/2CdT8mT8MYAADGMAABjCAAQx8fgauZ5wcX/OoE82cePeS2TAz1hLOIYGuktv5qZLG717siKcAn+PbOgCmJLtjeNRj77W31U79JMrSPDh9Lan0k8vkfs/tK9ct61v6dOc0GVet+Y1tMdZWnK1twzgbTzadxN2Z/2FMldkRY4hYWmXq9vPnWaMyN6dPr+Sy1j//SdYcm2MMYAADGMAABjCAAQx8bAauZpwUMMakdn76IBLSMETmBLN6rSMS2coYCdjGesvXSOpt8Tn62hNPKdOLKfrOy1YiP7QR8VeGSq6b189tJ5siU92k1aj78yEn/tHfVL6Krbc96sVyjz61mRGmyMlcHGOO/cOTRimu2Qi7m58KKU8TpTLB1GJb0b/+cdi7tsFUxtUae4ufeIpoyxDrjSc0tPzYJ03zZ/4wgAEMYAADGMAABjDwtRi4mnFy+NffHfynAQYw8FIGXIy+1sXIfJtvDGAAAxjAAAYwgIFbZYBxwuBhcGHgJhm41ZOmuFzQMYABDGAAAxjAAAYw8LUYYJxImm8yaX7pUwrqfZ4nXFyMvtbFyHybbwxgAAMYwAAGMICBW2WAccI4YZxg4CYZuNWTprhc0DGAAQxgAAMYwAAGMPC1GGCcSJpvMmn25MjneXLkpXPpYvS1Lkbm23xjAAMYwAAGMIABDNwqA1c1Tm510OJyQGLgthhomSvm6LbmyHyYDwxgAAMYwAAGMICBr8oA4+Tnwf9V4Tfu22GfcXI7c+G4MBcYwAAGMIABDGAAAxhYMsA4YZwcHBTLg4Ieb68H4+TtNcc5zTGAAQxgAAMYwAAGMLCPAcYJ44RxgoF3Z4Bxsu+E7cJGJwxgAAMYwAAGMIABDLw9A4wTSfO7J80O/Lc/8G9Nc8YJBm6NSfFgEgMYwAAGMIABDGAgGLi6cXJ3/3h4fn6e/z/eT4n63d394XHY93i4v7ubtw91ng4P38ZtJ208z/vKQL49PM3t576O608P3w53d98OD0/Ph+fUf6l7/zjG9ng/9x/irC2n9lJ/0caueL49HJ6enw9RJ/oax7oc38n4O2PIOpcxR5tby3ksy3ko9aY5eno4PBStnh4O39JcRduDjimuuc2Y++WYSr3QPuLOWtydoU/EsLbsxTONL8We2xnnctalNxdz+3PZaGfq40wNo35rGfrU8xGaFi3P4TDmYFyezlWJYR5jzOnMb2vf0FZH13pMjBMXpZoJjeEi0wAAIABJREFUnzGBAQxgAAMYwAAGMHArDFzVOBkTtzkJmxLIYzIVn5+eng450W+ZB1mwut28b0wo5z5j35TYpUQukuCcsEf5tWU/aW0kzYMB0IhnpzFQjzU0ywbQkCwnQ+Ml44ox5XkoGuT+h/XUT9YoGydTjKnsoP/jbLrk8qWdOuaIp56bLTZyTLG+Fc9oNjTmrjLbshZDzGH8Bc/HOb2EhhF7bxn6PCcTcRpny5A7g8NxnM/LY/I4tlOjZtSteXxFnXTM9cbDOHFR7LFhOzYwgAEMYAADGMAABt6bgasaJ+VpkjqJzIlvJHqPDw+Hp5xkV0+c1CJN9RpPiYwJZcOoqJLgaKOOr+6r/jwliCneukz+3I3nmFSuGQO9GLOGpa8T46RK6HM8a+u1gRD9h0nTM05Ck9Cyjmetz9gXbURfYQys6RN1t5Zb8dSmTbSXYwgtYoxTmYrVS2kY7feWQ8zHJ1hCo7Lt6eF+eLIqtkX9czkczZPKFFlhvp6/6Lc2m2J7vWScuBjWTPiMCQxgAAMYwAAGMICBW2HgqsZJ/jY8BhzJaElAIxl9vC+v0cxmR20MRN1YRht1clj2dxPEZJz0krxof2251nerXjeePcZJlZRH+xFDJPG1MRC6hgkR9baWdbv1PORkOrcVeuY5jdhyubX1aCNijljqOa5jWmuz7Ast1uKJMtF3tJnH2+s34oz2Tz5Xc5jbjH7GOMdXyaKdvK+1PsRTjIzS/vGJjvvHcgy12xnjmo+xaDPiPdE58dkrE22UZT1/sa+nW+yPJePERTFYsMQCBjCAAQxgAAMYwMCtMXBl46T1+sP4uyYlQYyEtSRtQ4IVrzxUyWYtWm0U5P3dBDEZJ0PyuvLteW6vXt+bCEa9bjwpMY2yZZnb7yfZs4alTq3HWO80Sc799NbnPk9/E2aMLZ5CKDGMfUTSPMxjZ1y9/mJ7sBDGQS9Zz/pE3bVlr526zumTIsvxz7osfwunjru0O5ddtlH27dGwjq31eWhnYLjMw+Phvug+fL6scTIcpxvH4zCudHzleGctlrrlMmWdceLiWDPhMyYwgAEMYAADGMAABm6FgXczTsq35JF0Dgn38HrJMSlvJGpjwhk/Stk3BbpGRSR2w4+59utvTUydCI6f+3F14zkaDMsf5Vy2U/cVsYVu85MGUS+Wp4ZV1N1aRtvld2eeS0Kefgh2kfQPczS+ihV1JgOs8RsbW/2OxsU8L2F4rOmz1WbZH9yU2NbK1+Wi/6i3dy6GPo+vSr1Uw7U4Y98Qz9H8K+uPj+U1nflHkMOAivJbHMY4p/IxhodvyQgaNRy1CNaW5lkwWdoJDetYoo+8ZJy4KGYerOMBAxjAAAYwgAEMYOCWGHg342RM8sYnJyJpK8lzWR+T2DmJrgVbS8i6CWIYJ4/3x7/msjQFoo94emKZsM+xjEnj/Hmq1zB7yr5uPJ0nM/LYx75O4wyjIhLS/MRJGACxb4ovxp/+ClDrVapSPhLjkzaGmMexD6+FPIyviUQ889zNf20l+l9bjqbJ8vdwYo6Djaif9SnbtuYr9KjbifZiGWOIxL/Wvv5c16u1eo2Ge8Y1tH80TmrGBj2rH2Sty0zx9zg8bi/jGseyznx7HvZzwDhxYQwmLbGAAQxgAAMYwAAGMHBrDFzDOPmP/8oPh+9KItRKzHNCHMlqJLXDvpIMdkyILF42C/L2boIYxsHwpMvxFYpj4pnrb633EvE6oY92uvH0EtY09vU256S01mI0Ik4Nl4hpa7kec0mgi36l/eNrIsNyTKzHuksTZK2/dYNhHmO00dMk9tfLc+KZdey9YtMwD3rzOGzvlV/XsB5D63M2Tur9wzhea5wcnyhaM8PyXEzGSdVvHVvvM+PExbHHhu3YwAAGMIABDGAAAxh4bwauapw8Nf6qzpgoj0n9iXEymBtPh4fyJEP6M6stkeYkd/kKRjfpT8ZJaS8S6njCoNVHa1vEXNfLSWSu142nl3Bn4+RYpv00w2yM1FqMsew3L3K8ZX095qfDw/3D4emYIJe+H+9Pf++k/rO1dR9DP8fkvNZyjuECxknM+w6TbJrDMr7qdaPgZWsuYpyv0TDaWFte2zjJTO1hnnHiYrbGq334wAAGMIABDGAAAxj4yAxc1TgZkq9kgNTJZyRk8cRJEbIkhONvQ5x+Wx9ChzGQ6037et/0RwKdvhGPdupkONrqLVv1pqT7204jZ4dxUvrf0nAqk4yBKYlN23pjaW3vJv3H370orzGFZqMRVn7vYjZyYp6zITLE9Phw+Hb8zZTQMJfJsUQb9Rz3dM516/VoK/dVx1PqBI/ja1rzeKK9PXMRZV+rYbTTWw6xJJZzuda+bjwNDutxlrZjvmLe523jcTox14kpx9da98SJC2mLC9twgQEMYAADGMAABjBwCwxc1TgpAxyTsPghyTnhLvsiUc3JcWzLT5zUbeQkvRaxmyA2jJNSNxL/nBDWbbY+T8l4/s2QhlHRjaeRsJZ+WsZAPf461mF/1Xckulnb1jha27oxT8bJbGrNOiyNhnkeY+5TnZiLrF1aLzFHu3X8LX1aY6i3rcWTy05adwyAaf8x3nouoq1LaBhttZZDHGsx1jz0DMUjh4vf9KnqRv8xJ62yjBMXtODEEgsYwAAGMIABDGAAA5+NgasbJ0WwXhL52cS85nhoeDsnH3Nx+bnwxMnlNb3m+Ujb5gsDGMAABjCAAQxg4Csx8DbGSTxhcPyGfPj2v/Ot9lcS/5yx1t/o0/D9TlTm4vLaM04ur+k55xdl6Y8BDGAAAxjAAAYwgIE+A29inJQJqF+V6L3iYLL6k0XDvjZvzY25uOxcME4uq+dbHw/6M38YwAAGMIABDGAAA5+ZgTczTj6ziMbmJIGB1zHAOHmdfvijHwYwgAEMYAADGMAABq7HAOPk568nLnBpi4F9DDBO9umEJzphAAMYwAAGMIABDGDg7Rm4qnHSSoZs++5AAxpgYJsBF4S3vyDQnOYYwAAGMIABDGAAAxg4ZYBx8q+3EzhJLo0w8PYMOGGfnrBpQhMMYAADGMAABjCAAQy8PQOME8aJJ2AwcJMMuCC8/QWB5jTHAAYwgAEMYAADGMDAKQOME0nzTSbNnvB4+yc8bk1zJ+zTEzZNaIIBDGAAAxjAAAYwgIG3Z4BxwjhhnGDgJhlwQXj7CwLNaY4BDGAAAxjAAAYwgIFTBq5mnBD7VGya0AQDGMAABjCAAQxgAAMYwAAGMPCxGGCc+HPEBwftxzpozZf5wgAGMIABDGAAAxjAAAYw8HYMME4YJ4wTDGAAAxjAAAYwgAEMYAADGMAABjoMME46wnDv3s69ozWtMYABDGAAAxjAAAYwgAEMYOBWGWCcME64ihjAAAYwgAEMYAADGMAABjCAAQx0GGCcdIS5VadLXFxYDGAAAxjAAAYwgAEMYAADGMDA2zHAOGGccBUxgAEMYAADGMAABjCAAQxgAAMY6DDAOOkIw717O/eO1rTGAAYwgAEMYAADGMAABjCAgVtlgHHCOOEqYgADGMAABjCAAQxgAAMYwAAGMNBhgHHSEeZWnS5xcWExgAEMYAADGMAABjCAAQxgAANvxwDjhHHCVcQABjCAAQxgAAMYwAAGMIABDGCgwwDjpCMM9+7t3Dta0xoDGMAABjCAAQxgAAMYwAAGbpUBxgnjhKuIAQxgAAMYwAAGMIABDGAAAxjAQIcBxklHmFt1usTFhcUABjCAAQxgAAMYwAAGMIABDLwdA4wTxglXEQMYwAAGMIABDGAAAxjAAAYwgIEOA4yTjjDcu7dz72hNawxgAAMYwAAGMIABDGAAAxi4VQYYJ4wTriIGMIABDGAAAxjAAAYwgAEMYAADHQYYJx1hbtXpEhcXFgMYwAAGMIABDGAAAxjAAAYw8HYMME4YJ1xFDGAAAxjAAAYwgAEMYAADGMAABjoMME46wnDv3s69ozWtMYABDGAAAxjAAAYwgAEMYOBWGWCcME64ihjAAAYwgAEMYAADGMAABjCAAQx0GGCcdIS5VadLXFxYDGAAAxjAAAYwgAEMYAADGMDA2zHAOGGccBUxgAEMYAADGMAABjCAAQxgAAMY6DDAOOkIw717O/eO1rTGAAYwgAEMYAADGMAABjCAgVtlgHHCOOEqYgADGMAABjCAAQxgAAMYwAAGMNBhgHHSEeZWnS5xcWExgAEMYAADGMAABjCAAQxgAANvxwDjhHHCVcQABjCAAQxgAAMYwAAGMIABDGCgwwDjpCMM9+7t3Dta0xoDGMAABjCAAQxgAAMYwAAGbpUBxgnjhKuIAQxgAAMYwAAGMIABDGAAAxjAQIcBxklHmFt1usTFhcUABjCAAQxgAAMYwAAGMIABDLwdA4wTxglXEQMYwAAGMIABDGAAAxjAAAYwgIEOA4yTjjDcu7dz72hNawxgAAMYwAAGMIABDGAAAxi4VQYYJ4wTriIGMIABDGAAAxjAAAYwgAEMYAADHQYYJx1hbtXpEhcXFgMYwAAGMIABDGAAAxjAAAYw8HYMME4YJ1xFDGAAAxjAAAYwgAEMYAADGMAABjoMME46wnDv3s69ozWtMYABDGAAAxjAAAYwgAEMYOBWGWCcME64ihjAAAYwgAEMYAADGMAABjCAAQx0GGCcdIS5VadLXFxYDGAAAxjAAAYwgAEMYAADGMDA2zHwIYyTbw9Ph+enh8O3u7uLOGBDe8/Ph+fH+4u0V4C9f7xse+ccBJfW55y+lX27g5XWtMYABjCAAQxgAAMYwAAGMPD2DFzdOLm7+3Z4eHo+PBejYvj/dHj4dp4Bcnd3f3h8fj483p9XrwdUGCdPD98+hXFyaX16up2z/e7bw+HpgnPW6/vu/jGxVRhr8zUYWxODl2OpF5ftb38yoznNMYABDGAAAxjAAAYwgIFrMHBV4yQS+vy0yGCkPJ7/9Mh7PtGxR/j3ju+9+681eivjpO53NMWW5kmtTZgtlzLi6hh8drLGAAYwgAEMYAADGMAABjDweRi4qnEyJKwXesVmTHaXCfEtgVgn528d263p817GSZh1a6bI9BRUelVrjPd2+XprnvT3eU7y5tJcYgADGMAABjCAAQxg4HUMXM04iQR27+swW6/PRLLbam/NtMi//xFPGkyvDaXEuYCU+4h4hrIN8+ekrcZvpizaqPbvjXmI6+R1lMfDffV7Lzn23kFxGvPczhjrqXHQMkC224nXsurl3F9zXGk+hj6K7jH2sn58/ef5edlOHm8r3rx/6DdeH0v9le0xX2umS92Wz687AdGPfhjAAAYwgAEMYAADGMDArTNwPePkzN+4iKS1ZYyEiGOZ06R57cmWlkERJkP947DT9mRytAyg0ThYmgx1P3Ws0U70uTfmPUbAlj5l/1Y7EV+tfx3nVjsRy1a5UcN5LqP/0GcyZybD5Onw9PR4uN/gqo434snL6Kse66BTGDWVqZLrW3dixwAGMIABDGAAAxjAAAYw8HUYuJ5xckxAL/ntfSS8dZuDSXF8KmRM2EdTI4yQOkGO7ZGkB/DT9mNbsT2bIlGmbnNZpv1jttlw2RtzrhPx9JY9fUr5Pe3UpkOrvT3tDP2tGBw9DbPZNPYz/ohrmDBF835M8XTL0tBqaTWMs/Mjsjn2/Ns8rXZs+zonSnNtrjGAAQxgAAMYwAAGMPB1GfhQxkkBNRsUAe6YZI9PL4zJ9/NhTLLHv+hTmxyRuHeNk+ppg9xnJPG1ebMoM5hGpwl8rrs35inW4S/CnLYZGsQyxxHbynJPOzm+oc4wjvmpkL3tDOVWjZPRWJpemRrGFsbH2F82aHJcLeOk9Bf/o2w957F/0Od55CO2tZbRz9prQa16ts1zQQtaYAADGMAABjCAAQxgAAOfgYHrGSfHxLmXwL5UvDExXhoIedv949Ph4f7h8DQ8NdJ58qPzGxeTufAWxsmgzziOs2LeMFCyFi2NpzE22pn2HcdfTIbe/E1lG+2UfsPAqA2mYd+OPy/9UuOktD+YI9VTQ2V7NtXK597/iN0TJ32NetrZTjMMYAADGMAABjCAAQxg4LMxcD3jJMyJRgL7GhEjYc8J/fh0QDEh7g+PQ3/lSZPj58YrGdHGi544OSb9p/0/H6K9SLxr0yA/ZXJuzKFZL/Z6f44v9uVlr505xmI6LZ82yfVjvdvO6hMn45NAoVe0lZeXNk7G9uY5yn3l9b3lch3rLgwYwAAGMIABDGAAAxjAAAY+LwNXM04KNGEg5AR5SLQfHw7fqr8Ks/dpgNJu/i2MoZ+jSfP09DQ9ITGUKZ8byX832Q+zZ+WJk9JffqJhfqVjmZSPr4TMxkOUC0MjYtgbc+l3HOv4FE20E9vzstYn74v1Op56+/AaTaVDlMnLzXY6bcR81+ZStP1S4ySMj9xubMscRj95uRVTLmv9854Uza25xQAGMIABDGAAAxjAAAYyA1c1TkpHkVjPv2exfM0mgomkdc0QiLLRZk6OR6NibnsybdITL9HHHEv8rsZYL8yMOsEe2k4GwFTu+NscJY6h7VSmxDrGFH2cvvby0pi3NGrp0xp7r52x7Kxl6F6W57QzzcFRp/r3QlpthfZ7jZNa47qPeq7quQ+GxljbYy7j/jf/5t9s/s86WXeixQAGMIABDGAAAxjAAAYw8DkYuLpxci1QhoQ5mSLX6uejtvsafQZDg7aL30BhnHyOE95HPZ7FjT8MYAADGMAABjCAAQy8HwMf1jjZekLgq0P1Un3ykx5fXcM8fsbJ+52k8jxYNw8YwAAGMIABDGAAAxjAwFsz8GGNk7cW6rP3N7/y0n9d5bNrsDY+xomT8xof9uEDAxjAAAYwgAEMYAADn5cBxsnKn6UF/ucF/9y5ZZxg4VxmlMcMBjCAAQxgAAMYwAAGPgcDjBPGyeK3PBzYn+PANo/mEQMYwAAGMIABDGAAAxjAwGUYuI5x8muH70zQZSaIjnTEAAYwgAEMYAADGMAABjCAAQy8HwOME0+ceOIEAxjAAAYwgAEMYAADGMAABjCAgQ4DjJOOMNy893PzaE97DGAAAxjAAAYwgAEMYAADGLgVBhgnjBOuIgYwgAEMYAADGMAABjCAAQxgAAMdBhgnHWFuxdkSB5cVAxjAAAYwgAEMYAADGMAABjDwfgwwThgnXEUMYAADGMAABjCAAQxgAAMYwAAGOgwwTjrCcPPez82jPe0xgAEMYAADGMAABjCAAQxg4FYYYJwwTriKGMAABjCAAQxgAAMYwAAGMIABDHQYYJx0hLkVZ0scXFYMYAADGMAABjCAAQxgAAMYwMD7MXAV4+Sv/trhO5P6fpNKe9pjAAMYwAAGMIABDGAAAxjAAAYuwwDjxBMnHsfCAAYwgAEMYAADGMAABjCAAQxgoMMA46QjDGfuMs4cHemIAQxgAAMYwAAGMIABDGAAAx+ZAcYJ44SriAEMYAADGMAABjCAAQxgAAMYwECHAcZJR5iP7IaJnZuLAQxgAAMYwAAGMIABDGAAAxi4DAOME8YJVxEDGMAABjCAAQxgAAMYwAAGMICBDgOMk44wnLnLOHN0pCMGMIABDGAAAxjAAAYwgAEMfGQGGCeME64iBjCAAQxgAAMYwAAGMIABDGAAAx0GGCcdYT6yGyZ2bi4GMIABDGAAAxjAAAYwgAEMYOAyDDBOGCdcRQxgAAMYwAAGMIABDGAAAxjAAAY6DDBOOsJw5i7jzNGRjhjAAAYwgAEMYAADGMAABjDwkRlgnDBOuIoYwAAGMIABDGAAAxjAAAYwgAEMdBhgnHSE+chumNi5uRjAAAYwgAEMYAADGMAABjCAgcswwDhhnHAVMYABDGAAAxjAAAYwgAEMYAADGOgwwDjpCMOZu4wzR0c6YgADGMAABjCAAQxgAAMYwMBHZoBxwjjhKmIAAxjAAAYwgAEMYAADGMAABjDQYYBx0hHmI7thYufmYgADGMAABjCAAQxgAAMYwAAGLsMA44RxwlXEAAYwgAEMYAADGMAABjCAAQxgoMMA46QjDGfuMs4cHemIAQxgAAMYwAAGMIABDGAAAx+ZAcYJ44SriAEMYAADGMAABjCAAQxgAAMYwECHAcZJR5iP7IaJnZuLAQxgAAMYwAAGMIABDGAAAxi4DAOME8YJVxEDGMAABjCAAQxgAAMYwAAGMICBDgOMk44wnLnLOHN0pCMGMIABDGAAAxjAAAYwgAEMfGQGGCeME64iBjCAAQxgAAMYwAAGMIABDGAAAx0GGCcdYT6yGyZ2bi4GMIABDGAAAxjAAAYwgAEMYOAyDDBOGCdcRQxgAAMYwAAGMIABDGAAAxjAAAY6DFzDOPnLf/XXDt9xti7jbNGRjhjAAAYwgAEMYAADGMAABjCAgfdjgHHScZRA+X5Q0p72GMAABjCAAQxgAAMYwAAGMHArDDBOGCcex8IABjCAAQxgAAMYwAAGMIABDGCgwwDjpCPMrThb4uCyYgADGMAABjCAAQxgAAMYwAAG3o8BxgnjhKuIAQxgAAMYwAAGMIABDGAAAxjAQIcBxklHGG7e+7l5tKc9BjCAAQxgAAMYwAAGMIABDNwKA4wTxglXEQMYwAAGMIABDGAAAxjAAAYwgIEOA4yTjjC34myJg8uKAQxgAAMYwAAGMIABDGAAAxh4PwYYJ4wTriIGMIABDGAAAxjAAAYwgAEMYAADHQYYJx1huHnv5+bRnvYYwAAGMIABDGAAAxjAAAYwcCsMME4YJ1xFDGAAAxjAAAYwgAEMYAADGMAABjoMME46wtyKsyUOLisGMIABDGAAAxjAAAYwgAEMYOD9GGCcME64ihjAAAYwgAEMYAADGMAABjCAAQx0GGCcdITh5r2fm0d72mMAAxjAAAYwgAEMYAADGMDArTDAOGGccBUxgAEMYAADGMAABjCAAQxgAAMY6DDAOOkIcyvOlji4rBjAAAYwgAEMYAADGMAABjCAgfdjgHHCOOEqYgADGMAABjCAAQxgAAMYwAAGMNBhgHHSEYab935uHu1pjwEMYAADGMAABjCAAQxgAAO3wgDjhHHCVcQABjCAAQxgAAMYwAAGMIABDGCgwwDjpCPMrThb4uCyYgADGMAABjCAAQxgAAMYwAAG3o8BxgnjhKuIAQxgAAMYwAAGMIABDGAAAxjAQIcBxklHGG7e+7l5tKc9BjCAAQxgAAMYwAAGMIABDNwKA4wTxglXEQMYwAAGMIABDGAAAxjAAAYwgIEOA4yTjjC34myJg8uKAQxgAAMYwAAGMIABDGAAAxh4PwYYJ4wTriIGMIABDGAAAxjAAAYwgAEMYAADHQYYJx1huHnv5+bRnvYYwAAGMIABDGAAAxjAAAYwcCsMME4YJ1xFDGAAAxjAAAYwgAEMYAADGMAABjoMME46wtyKsyUOLisGMIABDGAAAxjAAAYwgAEMYOD9GGCcME64ihjAAAYwgAEMYAADGMAABjCAAQx0GGCcdITh5r2fm0d72mMAAxjAAAYwgAEMYAADGMDArTDAOGGccBUxgAEMYAADGMAABjCAAQxgAAMY6DDAOOkIcyvOlji4rBjAAAYwgAEMYAADGMAABjCAgfdjgHHCOOEqYgADGMAABjCAAQxgAAMYwAAGMNBhgHHSEYab935uHu1pjwEMYAADGMAABjCAAQxgAAO3wgDjhHHCVcQABjCAAQxgAAMYwAAGMIABDGCgwwDjpCPMrThb4uCyYgADGMAABjCAAQxgAAMYwAAG3o8BxgnjhKuIAQxgAAMYwAAGMIABDGAAAxjAQIcBxklHGG7e+7l5tKc9BjCAAQxgAAMYwAAGMIABDNwKA4wTxglXEQMYwAAGMIABDGAAAxjAAAYwgIEOA4yTjjC34myJg8uKAQxgAAMYwAAGMIABDGAAAxh4PwYYJ4wTriIGMIABDGAAAxjAAAYwgAEMYAADHQYYJx1huHnv5+bRnvYYwAAGMIABDGAAAxjAAAYwcCsMME4YJ1xFDGAAAxjAAAYwgAEMYAADGMAABjoMME46wtyKsyUOLisGMIABDGAAAxjAAAYwgAEMYOD9GGCcME64ihjAAAYwgAEMYAADGMAABjCAAQx0GGCcdITh5r2fm0d72mMAAxjAAAYwgAEMYAADGMDArTDAOGGccBUxgAEMYAADGMAABjCAAQxgAAMY6DDAOOkIcyvOlji4rBjAAAYwgAEMYAADGMAABjCAgfdjgHHCOOEqYgADGMAABjCAAQxgAAMYwAAGMNBhgHHSEYab935uHu1pjwEMYAADGMAABjCAAQxgAAO3wgDjhHHCVcQABjCAAQxgAAMYwAAGMIABDGCgwwDjpCPMrThb4uCyYgADGMAABjCAAQxgAAMYwAAG3o8BxgnjhKuIAQxgAAMYwAAGMIABDGAAAxjAQIcBxklHGG7e+7l5tKc9BjCAAQxgAAMYwAAGMIABDNwKA4wTxglXEQMYwAAGMIABDGAAAxjAAAYwgIEOA4yTjjC34myJg8uKAQxgAAMYwAAGMIABDGAAAxh4PwYYJ4wTriIGMIABDGAAAxjAAAYwgAEMYAADHQYYJx1huHnv5+bRnvYYwAAGMIABDGAAAxjAAAYwcCsMME4YJ1xFDGAAAxjAAAYwgAEMYAADGMAABjoMME46wtyKsyUOLisGMIABDGAAAxjAAAYwgAEMYOD9GGCcME64ihjAAAYwgAEMYAADGMAABjCAAQx0GGCcdITh5r2fm0d72mMAAxjAAAYwgAEMYAADGMDArTDAOGGccBUxgAEMYAADGMAABjCAAQxgAAMY6DDAOOkIcyvOlji4rBjAAAYwgAEMYAADGMAABjCAgfdjgHHCOOEqYgADGMAABjCAAQxgAAMYwAAGMNBhgHHSEYab935uHu1pjwEMYAADGMAABjCAAQxgAAO3wgDjhHHCVcQABjCAAQxgAAMYwAAGMIABDGCgwwDjpCPMrThb4uCyYgADGMAABjCAAQxgAAMYwAAG3o8Bxglepw+WAAAFq0lEQVTjhKuIAQxgAAMYwAAGMIABDGAAAxjAQIcBxklHGG7e+7l5tKc9BjCAAQxgAAMYwAAGMIABDNwKA4wTxglXEQMYwAAGMIABDGAAAxjAAAYwgIEOA4yTjjC34myJg8uKAQxgAAMYwAAGMIABDGAAAxh4PwYYJ4wTriIGMIABDGAAAxjAAAYwgAEMYAADHQYYJx1huHnv5+bRnvYYwAAGMIABDGAAAxjAAAYwcCsMME4YJ1xFDGAAAxjAAAYwgAEMYAADGMAABjoMME46wtyKsyUOLisGMIABDGAAAxjAAAYwgAEMYOD9GGCcME64ihjAAAYwgAEMYAADGMAABjCAAQx0GGCcdITh5r2fm0d72mMAAxjAAAYwgAEMYAADGMDArTDAOGGccBUxgAEMYAADGMAABjCAAQxgAAMY6DDAOOkIcyvOlji4rBjAAAYwgAEMYAADGMAABjCAgfdjgHHCOOEqYgADGMAABjCAAQxgAAMYwAAGMNBhgHHSEYab935uHu1pjwEMYAADGMAABjCAAQxgAAO3wsBVjJO/9muH725lgOJwsGEAAxjAAAYwgAEMYAADGMAABjDwUgYYJ5448TgWBjCAAQxgAAMYwAAGMIABDGAAAx0GGCcdYV7qRKnHxcQABjCAAQxgAAMYwAAGMIABDHweBhgnjBOuIgYwgAEMYAADGMAABjCAAQxgAAMdBhgnHWG4g5/HHTSX5hIDGMAABjCAAQxgAAMYwAAGXsoA44RxwlXEAAYwgAEMYAADGMAABjCAAQxgoMMA46QjzEudKPW4mBjAAAYwgAEMYAADGMAABjCAgc/DwHWMk7/hzxE7SD7PQWIuzSUGMIABDGAAAxjAAAYwgIGvywDjxBMnHsfCAAYwgAEMYAADGMAABjCAAQxgoMMA46QjDDfx67qJ5t7cYwADGMAABjCAAQxgAAMYwEAwwDhhnHAVMYABDGAAAxjAAAYwgAEMYAADGOgwwDjpCBPOkiWXEQMYwAAGMIABDGAAAxjAAAYw8HUZYJwwTriKGMAABjCAAQxgAAMYwAAGMIABDHQYYJx0hOEmfl030dybewxgAAMYwAAGMIABDGAAAxgIBhgnjBOuIgYwgAEMYAADGMAABjCAAQxgAAMdBhgnHWHCWbLkMmIAAxjAAAYwgAEMYAADGMAABr4uA4wTxglXEQMYwAAGMIABDGAAAxjAAAYwgIEOA4yTjjDcxK/rJpp7c48BDGAAAxjAAAYwgAEMYAADwQDjhHHCVcQABjCAAQxgAAMYwAAGMIABDGCgwwDjpCNMOEuWXEYMYAADGMAABjCAAQxgAAMYwMDXZYBxwjjhKmIAAxjAAAYwgAEMYAADGMAABjDQYeAaxslP/trfOHzHjfu6bpy5N/cYwAAGMIABDGAAAxjAAAYw8FkYYJx0HKXPMsHG4WSFAQxgAAMYwAAGMIABDGAAAxh4OQOME8aJx7EwgAEMYAADGMAABjCAAQxgAAMY6DDAOOkIw417uRtHO9phAAMYwAAGMIABDGAAAxjAwGdhgHHCOOEqYgADGMAABjCAAQxgAAMYwAAGMNBhgHHSEeazOGPGweXFAAYwgAEMYAADGMAABjCAAQy8nAHGCeOEq4gBDGAAAxjAAAYwgAEMYAADGMBAhwHGSUcYbtzL3Tja0Q4DGMAABjCAAQxgAAMYwAAGPgsDjBPGCVcRAxjAAAYwgAEMYAADGMAABjCAgQ4DjJOOMJ/FGTMOLi8GMIABDGAAAxjAAAYwgAEMYODlDDBOGCdcRQxgAAMYwAAGMIABDGAAAxjAAAY6DDBOOsJw417uxtGOdhjAAAYwgAEMYAADGMAABjDwWRhgnDBOuIoYwAAGMIABDGAAAxjAAAYwgAEMdBhgnHSE+SzOmHFweTGAAQxgAAMYwAAGMIABDGAAAy9n4FrGyf8PTIRKU9KAsRcAAAAASUVORK5CYII=&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;You can copy the code from the Command prompt Window.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br style=&quot;background-color: white; box-sizing: border-box; white-space: pre-wrap;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;This is how you can find your Windows 10 Product Key via Command Prompt.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;background-color: white; font-size: large;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: tahoma, sans-serif, arial, helvetica; text-align: justify; white-space: pre-wrap;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/5717098015992780568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/5717098015992780568'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/06/find-windows-10-product-key-using.html' title='FIND WINDOWS 10 PRODUCT KEY USING COMMAND PROMPT '/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-1778044668148545724</id><published>2020-05-16T07:33:00.000-07:00</published><updated>2020-08-03T10:10:25.909-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ethical Hacking"/><title type='text'>NETWORK HACKING (PART-1: PREREQUISITE)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Now, before we start talking about network hacking, you need to have a basic understanding of how networks work. We all know that a network usually contains a number of clients connected to each other, and clients usually connect to a network in order to share data or share a resource. A really good example of a resource that we all have connected to networks in order to access is the internet.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjITM3s4NRqBqhkleG0PJOwfUoMgow6rDsT946rVnvmdhXnic0hOaXGK0VyKKhL9R0U0Ub7wCv3n0rL2sY2KebT0I6DBxareqNQTLfcv5-uKntvTD5XFp6eO-Qqu5nGe88_o0ZxjNrlI1E/s1600/network_hacking_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjITM3s4NRqBqhkleG0PJOwfUoMgow6rDsT946rVnvmdhXnic0hOaXGK0VyKKhL9R0U0Ub7wCv3n0rL2sY2KebT0I6DBxareqNQTLfcv5-uKntvTD5XFp6eO-Qqu5nGe88_o0ZxjNrlI1E/s1600/network_hacking_1.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So, we connect to Wi-Fi networks and even wired networks all the time just to access the internet. All networks work on the same principle. They have a device that is considered as a server. Now, in many cases, for example, in your home network, this server is your router. This is also referred to as an access point. Now, this router or server or access point is the only device that has access to the resource. So, none of these clients have direct access to the resource, even after connecting to the network. The only way they can access the resource is through the access point.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3Lnkppz3konogghwNCUB1V2DCWk49OVrSFk8Byz0BfhV0xuVAz9zKDY6jFCA8Tvqpu2OQy3iKqCQccYPvUyZisj0yodHpZQ0CJB0C2iXfNRA83KWMtOjHjwq8uCYfeJ7t1hkiAgNC5g/s1600/network_hacking_2+%25281%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;901&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3Lnkppz3konogghwNCUB1V2DCWk49OVrSFk8Byz0BfhV0xuVAz9zKDY6jFCA8Tvqpu2OQy3iKqCQccYPvUyZisj0yodHpZQ0CJB0C2iXfNRA83KWMtOjHjwq8uCYfeJ7t1hkiAgNC5g/s1600/network_hacking_2+%25281%2529.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So, let&#39;s say, for example, you&#39;re host 3 and you connected to your home network over Wi-Fi or over ethernet, over a cable and then you opened your browser and you typed facebook.com. What happens is your computer will send the request to the access point asking for facebook.com. The access point has access to the resource, which is the internet in this example, so it&#39;s gonna go and look for facebook.com. It will receive facebook.com, and it&#39;ll forward that response to your computer, and as a result, you will see the website loading on your browser. So if you actually go to your router at home and look at it, you&#39;ll see at the back it&#39;s connected through a cable to the wall and this is how it&#39;s getting its internet access. Therefore, it is the only device in your network that has direct access to the resource and none of your computers, none of the computers connected to the network can access the resource or can access the internet without the router, without the access point.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhksr1AlGmHombzhg8G0lqNOzZwnv6tbh6sBLhq0OxJvcFJ0SAeZTqsvdxJB9b3gkGTyc1tJxX5lKTqdIDBHIIVNDf9019ZhlP8dqo54BN7H9ilcunXn8B4cyvAaxeZsKxPv5e_GFeIwyM/s1600/network_hacking_3+%25281%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;901&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhksr1AlGmHombzhg8G0lqNOzZwnv6tbh6sBLhq0OxJvcFJ0SAeZTqsvdxJB9b3gkGTyc1tJxX5lKTqdIDBHIIVNDf9019ZhlP8dqo54BN7H9ilcunXn8B4cyvAaxeZsKxPv5e_GFeIwyM/s1600/network_hacking_3+%25281%2529.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So the only way for all of the connected clients to access the resource is to go through the router. Now, the data is transferred between clients and the access point as packets. So you can think of all of these arrows as a series of packets being transmitted between the client and the router as requests and responses. Now, in Wi-Fi networks, these packets are transmitted in the air. Therefore, if you have a wireless card and you&#39;re within range, you&#39;ll be able to capture all of these requests and responses.&amp;nbsp; &amp;nbsp; So, basically, you&#39;ll be able to see anything that any computer connected to the same network as you,&amp;nbsp; &amp;nbsp; thus on the internet, because they will have to send all of these data to the access point, and because they&#39;re sending this data in the air because you&#39;re in a WiFi network, you&#39;ll basically be able to capture these requests and responses. And you&#39;ll be able to see the URLs they visit, the usernames, the passwords they enter, the chat messages. Anything they do on the internet will be sent as packets and therefore you&#39;ll be able to capture it and analyze it.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;To capture packet data, we need an external WiFi card connected to our attack machine. Because in internal network card does not support some features to capture the packet. So we need the following changes in our machine.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;1. Change the MAC address of the wireless card.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;MAC address stands for Media Access Control, it&#39;s a permanent, physical, and unique address assigned to network interfaces by the device manufacturer. So whether you have a wireless card, or a wired, or Ethernet card,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;each one of these network cards&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;come with a specific address that is unique to this card.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So there are no two devices in the world that would have the same MAC address.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;And this address will always be the same to this specific device,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;even if you unplug it from your computer, connect it to another computer,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;then this network device will always have the same address.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So being able to change your MAC address to another device&#39;s MAC address&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;will allow you to impersonate this device and allow you to do things&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;that you might not be able to do.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So you&#39;d be able to bypass filters or connect to networks that only specific devices with specific MAC addresses can connect to, and you will also be able to hide your identity.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;How to do:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;1. Run the following command to see the list of network cards connected to your device.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;ifconfig&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;2. Disable the wireless card to change it&#39;s MAC address. (wlan0 is the name of the wireless interface)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;ifconfig wlan0 down&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;3. Change it&#39;s MAC with any number.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;ifconfig wlan0 hw ether 00:11:22:33:44:55&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;4.&amp;nbsp; Enable the interface.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;ifconfig wlan0 up&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;5. Check the MAC address of that interface.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;ifconfig&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Remember the MAC address will revert back to its original address once you restart your machine because we only change the MAC address in memory not physically.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;2. Change the mode of the wireless card.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;As we discussed the wireless data transfer happens in the form of a packet. S&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;o each packet has a source MAC and a destination MAC and it flows from the source to the destination. If you&#39;re within range,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;then you&#39;ll be able to capture all of this communication because these packets are literally sent in the air.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So we can just capture them&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;even if they do not have our MAC address as the destination MAC.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;To do this, we need to change the mode of operation of our wireless interface so that it operates in monitor mode.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;How to do:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;1. Run below command to check the mode of the wireless adapter.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;iwconfig&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;2. Disable the wireless card. (wlan0 is the name of the wireless adapter)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;ifconfig wlan0 down&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;3. Run below command&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;to kill any process&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;that could interfere with using your interface in monitor mode&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;airman-ng check kill&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Now you&#39;ll notice when you&#39;re on this command, it&#39;ll actually kill the network manager.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;we will only need to be in monitor mode when we are running pre-connection attacks so attacks that do not require us to connect to any network.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So we actually do not need an internet connection to run any of the attacks that require monitor mode.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;4. E&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;nable monitor mode.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;iwconfig wlan0 mode monitor&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;5. Enable the wireless card.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;iwconfig wlan0 up&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;6. Check interface mode.&lt;/span&gt;&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot; style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;iwconfig&lt;/span&gt;&lt;/blockquote&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Now, this is enough to get you going through some network attacks so that you can sniff data, analyze it, and start launching some cool pre-connection attacks.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;We&#39;ll discuss more networks attack.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Related posts:-&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h1 class=&quot;post-title entry-title&quot; itemprop=&quot;name headline&quot; style=&quot;background-color: white; font-family: Oswald; font-weight: 400; line-height: 44px; margin: 0px; outline: 0px; padding: 0px; position: relative; transition: all 0.3s ease 0s;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2020/02/setting-up-lab-for-hacking.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;LAB SETUP FOR ETHICAL HACKING&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h1 class=&quot;post-title entry-title&quot; itemprop=&quot;name headline&quot; style=&quot;background-color: white; font-family: Oswald; font-weight: 400; line-height: 44px; margin: 0px; outline: 0px; padding: 0px; position: relative; transition: all 0.3s ease 0s;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/05/way-to-be-anonymous-online.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;MOST POPULAR WAYS TO BECOME ANONYMOUS ONLINE&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;h1 class=&quot;post-title entry-title&quot; itemprop=&quot;name headline&quot; style=&quot;background-color: white; font-family: Oswald; font-weight: 400; line-height: 44px; margin: 0px; outline: 0px; padding: 0px; position: relative; transition: all 0.3s ease 0s;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/04/before-going-to-start-ethical-hacking.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;BEFORE GOING TO START ETHICAL HACKING!&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/1778044668148545724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/1778044668148545724'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/05/network-hacking-prerequisite.html' title='NETWORK HACKING (PART-1: PREREQUISITE)'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjITM3s4NRqBqhkleG0PJOwfUoMgow6rDsT946rVnvmdhXnic0hOaXGK0VyKKhL9R0U0Ub7wCv3n0rL2sY2KebT0I6DBxareqNQTLfcv5-uKntvTD5XFp6eO-Qqu5nGe88_o0ZxjNrlI1E/s72-c/network_hacking_1.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-1137050544979133981</id><published>2020-02-29T05:26:00.000-08:00</published><updated>2025-06-22T09:01:59.172-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ethical Hacking"/><title type='text'>LAB SETUP FOR ETHICAL HACKING </title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;HACKING LAB: -&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;A lab is a place where you can practice and experiment with things. It is essential for hackers also because let&#39;s say you discovered a new attack or you want to experiment with a new attack or you learned something new online and you want to test it, then the perfect place for you to test this and practice hacking.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFvuQfH8wMKUh3XfX_lbDTLpuflmaKikXJstQAVxBGuX9uVF-Q_yJyfsGAG7adcn2GEGwe4Uf8Q2XcFyzX7j-ImCYIdFqmQf5tRi0xPGXeTmyqML8n2xw6_La5LrwLYQE8yjxGvaxVyjc/s1600/hacking+lab+setup.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;675&quot; data-original-width=&quot;1200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFvuQfH8wMKUh3XfX_lbDTLpuflmaKikXJstQAVxBGuX9uVF-Q_yJyfsGAG7adcn2GEGwe4Uf8Q2XcFyzX7j-ImCYIdFqmQf5tRi0xPGXeTmyqML8n2xw6_La5LrwLYQE8yjxGvaxVyjc/s1600/hacking+lab+setup.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Now, to create a lab, you just need a number of computers with different operating systems and you&#39;ll need a number of networks if you&#39;re testing network attacks and if you&#39;re testing website attacks, then you will need to install websites on these computers. Or you can do all of this inside your computer, inside one machine and install everything else as virtual machines and this is what we&#39;re going to do.&amp;nbsp; This computer might be running Windows, OS X, or Linux. It doesn&#39;t really matter, it can run any operating system. You can keep all the programs that you like and install a virtualization software such as VirtualBox or VMware.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;After setup, our system will look like:-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsS0k2tQR42RWWICmqSfAfbLkXod6FCv_q_GaDIgrjYeqWSa5MlXboh-X7-eJ_CqwOlBJuojws39ayBTjEwaYEWe95R8eQm5s5wqcZsuM9N1D-kklLu1is1ViFzuGKCFjfwXkn1PAC7U8/s1600/labsetup+%25283%2529.png&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;934&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsS0k2tQR42RWWICmqSfAfbLkXod6FCv_q_GaDIgrjYeqWSa5MlXboh-X7-eJ_CqwOlBJuojws39ayBTjEwaYEWe95R8eQm5s5wqcZsuM9N1D-kklLu1is1ViFzuGKCFjfwXkn1PAC7U8/s1600/labsetup+%25283%2529.png&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/05/what-is-virtualization-clearly-explained.html&quot; target=&quot;_blank&quot;&gt;WHAT IS VIRTUALIZATION 😨..? [ CLEARLY EXPLAINED ]&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;These following &lt;b&gt;steps&lt;/b&gt; you need to do for a hacking lab:-&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Download and install virtual box&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Download and setup Kali Linux for the attacker.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Download and setup Metasploit OS for the server-side attack&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Download and setup Windows OS for the client-side attack.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;STEP 1:-&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;You can download it from this&amp;nbsp;&lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot; target=&quot;_blank&quot;&gt;page&lt;/a&gt;. It supports all operating systems. Just pick your operating system from here, download the relevant installer, and install it.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxZHg1gnRy9TyBvuJzIcoMX9B6ovvSWSuqSBUl9PHu0GojUIndB9zuATWkoNKS0ONlJGaBwyaVhC7EHhNOYzlNJf2N742t4oViwwCleAPSb2qQPJk4yC6lTYAqUhp6LwM7eFiu6db8HBg/s1600/virtualbox.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;657&quot; data-original-width=&quot;1295&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxZHg1gnRy9TyBvuJzIcoMX9B6ovvSWSuqSBUl9PHu0GojUIndB9zuATWkoNKS0ONlJGaBwyaVhC7EHhNOYzlNJf2N742t4oViwwCleAPSb2qQPJk4yC6lTYAqUhp6LwM7eFiu6db8HBg/s1600/virtualbox.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;After installation, you&#39;ll see a program similar to this&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJmj_tpNqpA1JFreay8aD-fJGnXx_FaLOag8rqnOmq_iNeQU2_n3Q0zjQCwsls-zCZvv7E4Ayq53yF4zk3TAugzrB7hLN-sPUUFVZbnhdj91K58ZEe6mAQlUF4NPL2rPC6RJe2LpCdoD8/s1600/virtualbox1.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;730&quot; data-original-width=&quot;1366&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJmj_tpNqpA1JFreay8aD-fJGnXx_FaLOag8rqnOmq_iNeQU2_n3Q0zjQCwsls-zCZvv7E4Ayq53yF4zk3TAugzrB7hLN-sPUUFVZbnhdj91K58ZEe6mAQlUF4NPL2rPC6RJe2LpCdoD8/s1600/virtualbox1.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;You will not have any virtual machines here so it will be empty and I will show you how to install all of these machines. One more thing to do, as soon as you install VirtualBox is to download and install the Extension Pack. This will give you better compatibility and it&#39;ll allow you to use USB devices on the virtual machines so you&#39;ll be able to use a USB mouse, USB keyboard, and USB wireless adapters.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitPZS5GWH66rlAyHH2I30oT3dunjAc2RLAbblS7Qdzn0AQdseA5kKLlyWvjmhRIJA0hrmVnENJjVpUenZFvjcw8nT-NxIt74jD632DY5z4KtRwhTjkP8k41RixNTOVaABDywr1VCe0EWw/s1600/extPack.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;565&quot; data-original-width=&quot;1155&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitPZS5GWH66rlAyHH2I30oT3dunjAc2RLAbblS7Qdzn0AQdseA5kKLlyWvjmhRIJA0hrmVnENJjVpUenZFvjcw8nT-NxIt74jD632DY5z4KtRwhTjkP8k41RixNTOVaABDywr1VCe0EWw/s1600/extPack.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;You just have to click on the download link.&amp;nbsp; It has to be the same&amp;nbsp;version which is the same version as the version of the VirtualBox that you downloaded. otherwise, it will not work.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So now you can go ahead and install virtual machines in VirtualBox.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;But before that just set a NAT Network.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;NAT Network:-&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span color=&quot;rgba(0 , 0 , 0 , 0.87)&quot; style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; white-space: pre-wrap;&quot;&gt;NAT network setting will basically create a virtual network where your host machine is going to be the router for this network and then all the virtual machines are going to be clients connected to this network. So they&#39;re going to get an Internet connection from your host machine. And at the same time, all of your virtual machines will be connected to the same virtual network. This is very handy because all virtual machines will be able to communicate with each other. &lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRed06ueEFLXvexQsa5oGsGmjboykEzCNqOvJhdIrYExPMlnUcEVdxxttsQ8n92m6rbpEqKZVGd6XkgUrrxjgPoJf3RwdsbyZl8ZaigRIuNvP5Wx3r7Y-JHktnrfa3eG7ZMUvRDQdymss/s1600/NatNetwork+%25282%2529.png&quot; style=&quot;font-family: &amp;quot;times new roman&amp;quot;; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;859&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRed06ueEFLXvexQsa5oGsGmjboykEzCNqOvJhdIrYExPMlnUcEVdxxttsQ8n92m6rbpEqKZVGd6XkgUrrxjgPoJf3RwdsbyZl8ZaigRIuNvP5Wx3r7Y-JHktnrfa3eG7ZMUvRDQdymss/s1600/NatNetwork+%25282%2529.png&quot; /&gt;&lt;/a&gt;&lt;span color=&quot;rgba(0 , 0 , 0 , 0.87)&quot; style=&quot;white-space: pre-wrap;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span color=&quot;rgba(0 , 0 , 0 , 0.87)&quot; style=&quot;font-size: large; white-space: pre-wrap;&quot;&gt;So this setting will first allow your virtual machines to have an Internet connection and it&#39;ll also allow them to communicate with each other through this virtual NAT network. Now this virtual network will rely on the connection of your host computer. So it will not need any extra interfaces. It will not need any extra adapters. And as far as the virtual machines are concerned they are connected to on either nat network but in reality, they are connected through the host machine. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span color=&quot;rgba(0 , 0 , 0 , 0.87)&quot; style=&quot;white-space: pre-wrap;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;span color=&quot;rgba(0 , 0 , 0 , 0.87)&quot; style=&quot;font-size: large; white-space: pre-wrap;&quot;&gt;&lt;a href=&quot;https://youtu.be/7r2H7THsyyg&quot; target=&quot;_blank&quot;&gt;Watch how to set NAT Network.&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Step 2:-&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;We&#39;re going to use an operating system called Kali Linux. The only difference between Kali and the actual original Debian Linux distro is the fact that Kali has a lot of hacking and penetration testing tools pre-installed and pre-configured in it. Therefore once you install Kali you will have access to so many hacking tools without the need to install or configure any of them which will save you a lot of time and a lot of effort.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Click on the &lt;a href=&quot;https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-image-download/#1572305786534-030ce714-cc3b&quot; target=&quot;_blank&quot;&gt;Download Link&lt;/a&gt;. Go to Kali Linux virtual box images.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKXSj2yxb3I5VrrcMFmvkphrublBScdwanGigfd66W0baNmjEwVjAUJCejk3RS8NRS36vxYupDcO8isPnukbMxGBrXLNHNUDaOEexTmGV3J9fihZhi4lTJULwOdUiZrPo8tcPwyXcCGno/s1600/kali1.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;656&quot; data-original-width=&quot;1348&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKXSj2yxb3I5VrrcMFmvkphrublBScdwanGigfd66W0baNmjEwVjAUJCejk3RS8NRS36vxYupDcO8isPnukbMxGBrXLNHNUDaOEexTmGV3J9fihZhi4lTJULwOdUiZrPo8tcPwyXcCGno/s1600/kali1.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;If you have a 64-bit computer make sure you download the 64-bit version. If you have a 32-bit computer download the 32 version.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;After download, you can see a file like this&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaFc-3aLifl9tsn0-TVzB4LyYTA6qxfZltByYvkcnpLWjNphHtqVyhBQx_DAONgciI4kSObIXRhpafpHyolN3-5Z7mBfuZnO70W3IuHbpJxvUyjBh9CASOkctKcQe9eAeQm5YcwWFLAgQ/s1600/kali2%255D.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;370&quot; data-original-width=&quot;703&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaFc-3aLifl9tsn0-TVzB4LyYTA6qxfZltByYvkcnpLWjNphHtqVyhBQx_DAONgciI4kSObIXRhpafpHyolN3-5Z7mBfuZnO70W3IuHbpJxvUyjBh9CASOkctKcQe9eAeQm5YcwWFLAgQ/s1600/kali2%255D.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;All you have to do is literally double click the file as you can see this will automatically run the file in the virtual box and you&#39;ll get a window which you can use to modify the settings of this virtual machine. For now, you just keep everything the same. And click on import. Give it some time. And you can see this will be imported into your virtual box.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Before start, do modify some settings. So click on the virtual machine that you want to modify its settings which is Kali Linux. Then click on the settings icon.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Click on the system and first of all, modify the amount of RAM. You can get away with one gigabyte but it might be a little bit slow. So you can make it at two.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI3HTj2HtJ2mN8dYeMbPjaRTxNAYeQktqsXWqx4toC4dWitcLpEmTPvsKTPaQPnxSEUh6qbD8Sm1A1XRQX7jNMjpfIfIZFujmYSyH9HRu9AwLeMimz75y5ESMhC3JZ41IsiTsfsPjbrKM/s1600/kali3.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;636&quot; data-original-width=&quot;1251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI3HTj2HtJ2mN8dYeMbPjaRTxNAYeQktqsXWqx4toC4dWitcLpEmTPvsKTPaQPnxSEUh6qbD8Sm1A1XRQX7jNMjpfIfIZFujmYSyH9HRu9AwLeMimz75y5ESMhC3JZ41IsiTsfsPjbrKM/s1600/kali3.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Click on the processors and as you can see by default it&#39;s only given to course. Again you can give it more or less. You can get away with one core. It will be too slow. Two is good enough. The more the better. Again it all depends on how much resources you have and can&#39;t afford to give to virtual machines.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_cXJrgz8fYasmwP8C6f8ETkM4eAekRpQryimTgeO1BKFxoSXbyt5omOXGSOQRtU6YhAVdaX7uCowukz282my_ZsO1n5W2BnwTE_ob7vS7m_1zCI-g7dhEyu43T-u6LE-EJxQWL7vZF98/s1600/kali4.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;636&quot; data-original-width=&quot;1251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_cXJrgz8fYasmwP8C6f8ETkM4eAekRpQryimTgeO1BKFxoSXbyt5omOXGSOQRtU6YhAVdaX7uCowukz282my_ZsO1n5W2BnwTE_ob7vS7m_1zCI-g7dhEyu43T-u6LE-EJxQWL7vZF98/s1600/kali4.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Now go to the network settings and set this to use NAT Network.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeJrh_CFCGHMq-sb0EnUgJ3fAIC_wBMKdysCJYEVN4rxPVcqEHvwl33in_2FR2_9NMnlEF2Ahlx0E0yvQXTWPTfJPpZfOucV808jvHG22yoULflOsCcEgu33iQ47nphz_pF45oH_lby9c/s1600/kali5.PNG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;636&quot; data-original-width=&quot;1251&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeJrh_CFCGHMq-sb0EnUgJ3fAIC_wBMKdysCJYEVN4rxPVcqEHvwl33in_2FR2_9NMnlEF2Ahlx0E0yvQXTWPTfJPpZfOucV808jvHG22yoULflOsCcEgu33iQ47nphz_pF45oH_lby9c/s1600/kali5.PNG&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;After all these settings you can go ahead and try to start it.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Step 3:-&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The machine that we&#39;re gonna use is called Metasploitable and it&#39;s a virtual machine that&#39;s built on Linux. And it contains a number of services that are typically used by servers. It also contains a number of web applications that act exactly like normal web applications and use the same technologies used by normal servers and normal web applications, so you are gonna install this machine by &lt;a href=&quot;https://information.rapid7.com/download-metasploitable-2017.html&quot; target=&quot;_blank&quot;&gt;click here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Follow the video and download the Metasploitable OS with the registration of your details.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/pUnUiMpB960/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/pUnUiMpB960?feature=player_embedded&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;After Download you got an image that is actually designed for VMware Player. So you are gonna import the hard disk file or the hard disk image so that you are gonna have an already installation without having to install it, the way you installed Kali Linux.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Both username and password of metasploitable os is:- &lt;b&gt;msfadmin&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Make sure that both Kali and Metasploitable OS having the same &lt;a href=&quot;https://www.youtube.com/watch?v=7r2H7THsyyg&amp;amp;feature=youtu.be&quot; target=&quot;_blank&quot;&gt;NAT Network&lt;/a&gt; setting else you can&#39;t ping from either.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Step 4:-&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Similarly, you can download Windows OS from HERE and install it as a virtual machine. and make the Network to&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/watch?v=7r2H7THsyyg&amp;amp;feature=youtu.be&quot; target=&quot;_blank&quot;&gt;NAT Network&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;YOUTUBE-iframe-video&quot; data-thumbnail-src=&quot;https://i.ytimg.com/vi/7r2H7THsyyg/0.jpg&quot; frameborder=&quot;0&quot; height=&quot;260&quot; src=&quot;https://www.youtube.com/embed/7r2H7THsyyg?feature=player_embedded&quot; width=&quot;490&quot;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;If I was not able to explain it better, then watch this full lab setup video.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;COMING SOON...&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;READ ALSO👇&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h1 class=&quot;post-title entry-title&quot; itemprop=&quot;name headline&quot; style=&quot;background-color: white; font-weight: 400; line-height: 44px; margin: 0px; outline: 0px; padding: 0px; position: relative; text-align: start; transition: 0.3s;&quot;&gt;
&lt;span face=&quot;&amp;quot;trebuchet ms&amp;quot; , sans-serif&quot; style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/05/way-to-be-anonymous-online.html&quot; target=&quot;_blank&quot;&gt;MOST POPULAR WAYS TO BECOME ANONYMOUS ONLINE&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;div&gt;
&lt;h1 class=&quot;post-title entry-title&quot; itemprop=&quot;name headline&quot; style=&quot;background-color: white; font-weight: 400; line-height: 44px; margin: 0px; outline: 0px; padding: 0px; position: relative; text-align: start; transition: 0.3s;&quot;&gt;
&lt;span face=&quot;&amp;quot;trebuchet ms&amp;quot; , sans-serif&quot; style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/04/before-going-to-start-ethical-hacking.html&quot; target=&quot;_blank&quot;&gt;BEFORE GOING TO START ETHICAL HACKING!&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/1137050544979133981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/1137050544979133981'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/02/setting-up-lab-for-hacking.html' title='LAB SETUP FOR ETHICAL HACKING '/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFvuQfH8wMKUh3XfX_lbDTLpuflmaKikXJstQAVxBGuX9uVF-Q_yJyfsGAG7adcn2GEGwe4Uf8Q2XcFyzX7j-ImCYIdFqmQf5tRi0xPGXeTmyqML8n2xw6_La5LrwLYQE8yjxGvaxVyjc/s72-c/hacking+lab+setup.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-2168473341378232397</id><published>2020-02-07T21:19:00.000-08:00</published><updated>2020-08-03T10:11:55.134-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Languages"/><title type='text'>MOST USED FUNCTION IN C LIBRARY (STRING_H)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;What is Library in the programming world?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;It is the same as our study library. But here we store functions instead of books. You can simply develop your own library by adding more than one function to it. All you just need to do is, write a method, and keep it inside your library. whenever you want to use that method in your program, you can include that library as a file header and just make a call to that method. definition of that method is inside of your library. So no need to write a bunch of code for the same method. As many times you can call the method and can get the return value without defining it in your program.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;There are two types of libraries. Static library and Dynamic library. We can discuss it in a later post. This is for some important methods used in string.h library.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;There are several library functions to manipulate strings and the prototypes for these functions are in header file string.h. In this Page we will discuss how to use some of the most commonly used string functions like strlen(), strcpy(), strcmp(), strcat(). and see how these functions are created.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2jgS7dUsfGa2rMxmictPCc0slBcWAOgh0-P77JnON3olgkUA9CrglprwOBmorwQSl2rbtf7X_mQw8WaO85_qdE8p9uvEB2xQCIYHAfTD8dtI3nWbMKGB8KlpW851sCowbs9PuFRyYdlY/s1600/StDiagram.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;907&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2jgS7dUsfGa2rMxmictPCc0slBcWAOgh0-P77JnON3olgkUA9CrglprwOBmorwQSl2rbtf7X_mQw8WaO85_qdE8p9uvEB2xQCIYHAfTD8dtI3nWbMKGB8KlpW851sCowbs9PuFRyYdlY/s1600/StDiagram.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;strcat:-&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Synopsis:&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;char *strcat(char *dest, const char *src);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The strcat()&amp;nbsp; function appends the src string to the dest string, overwriting the terminating null byte&amp;nbsp; (&#39;\0&#39;)&amp;nbsp; at the end of dest,&amp;nbsp; and then adds a terminating null byte.&amp;nbsp; The strings may not overlap, and the dest string must have enough space for the result.&amp;nbsp; If dest is not large enough, program behavior is unpredictable;&amp;nbsp; buffer overruns are a&amp;nbsp; favorite avenue for attacking secure programs.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Implementation:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;char* strcat(char* destination, const char* source){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&amp;nbsp; &amp;nbsp; char* ptr = destination ;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; while(*destination++)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; ptr++;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; while(*ptr++ = *source++);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; return destination;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;strcmp:-&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Synopsis:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int strcmp(const char *s1, const char *s2);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The strcmp() function compares the two strings s1 and s2.&amp;nbsp; It&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;returns an integer less than, equal to, or greater than zero&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;if s1 is found, respectively, to be less than, to match, or be&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;greater than s2.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif;&quot;&gt;Implementation:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;int strcmp(const char *l, const char *r){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&amp;nbsp; &amp;nbsp; while ( *l++==*r++ &amp;amp;&amp;amp; *l);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; return *(unsigned char *)l - *(unsigned char *)r;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; text-align: start;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; text-align: start;&quot;&gt;&lt;b&gt;strcpy:-&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif;&quot;&gt;Synopsis:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;char *strcpy(char *dest, const char *src);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The strcpy()&amp;nbsp; function copies the string pointed to by src, including the terminating null byte&amp;nbsp; (&#39;\0&#39;),&amp;nbsp; to the buffer pointed to by dest.&amp;nbsp; The strings may not overlap, and the destination string dest must be large enough to receive the copy. Beware of buffer overruns!&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Implementation:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;char* strcpy(char* destination, const char* source){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&amp;nbsp; &amp;nbsp; char *ptr = destination;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; while (*destination++ = *source++);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; return ptr;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; text-align: start;&quot;&gt;&lt;b&gt;strlen:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; text-align: start;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Synopsis:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;size_t strlen(const char *s);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Description:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The strlen()&amp;nbsp; function calculates the length of the string s,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;excluding the terminating null byte (&#39;\0&#39;).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Return value:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The strlen() function returns the number of bytes in the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;string.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Implementation:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;int strlen(char *str){&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&amp;nbsp; &amp;nbsp; int len=0;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; while(*str++) len++;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp; return(len);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;These are some most important library functions in string.h library. Comments for code explanation and stay tuned for more updates.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2168473341378232397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2168473341378232397'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2020/02/most-used-function-in-c-library-stringh.html' title='MOST USED FUNCTION IN C LIBRARY (STRING_H)'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2jgS7dUsfGa2rMxmictPCc0slBcWAOgh0-P77JnON3olgkUA9CrglprwOBmorwQSl2rbtf7X_mQw8WaO85_qdE8p9uvEB2xQCIYHAfTD8dtI3nWbMKGB8KlpW851sCowbs9PuFRyYdlY/s72-c/StDiagram.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-8222297208969532603</id><published>2019-12-24T07:52:00.000-08:00</published><updated>2020-08-03T21:10:02.493-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Embedded System"/><category scheme="http://www.blogger.com/atom/ns#" term="Protocols"/><title type='text'>I2C PROTOCOL</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Inter-Integrated Circuit:-&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The I2C protocol is a half-duplex synchronous two wired multi-master serial communication protocol invented by Philips Semiconductor in 1989.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1c405BXXbJZNqQPZf5qf7h9L_3lT1mECfwm_WmQqXgXSkbCXfqjJjSugVZGHQuY5C_Rp0Mr9svkbOHneQ1F4TAYNKs8A5vY_ZU20mKCxn6_wbYu5ZPX7RUL7AQPQ0pWJ4PXA3W4MOlHQ/s1600/I2C+Protocol.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;960&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1c405BXXbJZNqQPZf5qf7h9L_3lT1mECfwm_WmQqXgXSkbCXfqjJjSugVZGHQuY5C_Rp0Mr9svkbOHneQ1F4TAYNKs8A5vY_ZU20mKCxn6_wbYu5ZPX7RUL7AQPQ0pWJ4PXA3W4MOlHQ/s1600/I2C+Protocol.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;We discuss each word in the above sentence.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Half Duplex:-&lt;/b&gt;&amp;nbsp;It says that the data flow is either form Master to slave or from Slave to Master not in both directions simultaneously.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Synchronous:-&lt;/b&gt;&amp;nbsp;It means the sender always gets the acknowledgment response from the receiver after successful data received.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Two wired:-&lt;/b&gt;&amp;nbsp;To successful transfer data it required only two wires (SDA and SCL).&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;SDA:-&lt;/b&gt;&amp;nbsp;To transfer data bit.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;SCL:-&lt;/b&gt;&amp;nbsp;To transfer clock bit&amp;nbsp; (SCL gives the synchronous to I2C)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Multi-Master:- &lt;/b&gt;It means multiple devices can be connected on a single bus. You can see the above figure where two Microcontrollers are connected to a single bus. They can communicate with any slave.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Serial Communication:-&lt;/b&gt;&amp;nbsp;It means the data transfer from the sender to the receiver is bit by bit up to one byte.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFxQ0npns6sHh6c9k_92o_nDOeXEgW9HfuKu-FLVj4N9gpctBJCCogqqbNZsDkTZjHftKauDrNE1tbza6k9KxFiO47yTs6OcQTyYK_tYJu6t1idAo5ONXRS-E-xCCwPXqkJz9Kdm5KxIM/s1600/I2c_data_frame.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;638&quot; data-original-width=&quot;1416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFxQ0npns6sHh6c9k_92o_nDOeXEgW9HfuKu-FLVj4N9gpctBJCCogqqbNZsDkTZjHftKauDrNE1tbza6k9KxFiO47yTs6OcQTyYK_tYJu6t1idAo5ONXRS-E-xCCwPXqkJz9Kdm5KxIM/s1600/I2c_data_frame.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Before the master sending the actual data to the slave master needs to configure the BUS by sending the start bit, Address of slave and Read/Write bit, Then master gets an ACK bit from the slave, After that, the master starts sending the data and after successful sent it receives an ACK bit and then sends another packet of data. When it successfully sends all data master terminates the communication by sending the stop bit.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Start, Stop bits are the conditions of the flow of 1 and 0 in SDA and SLC line.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;START&lt;/b&gt;&amp;nbsp;occurs when the SCL is 1 and SDA goes 0 to 1.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;END&lt;/b&gt;&amp;nbsp;occurs when the SCL is 1 and SDA goes 1 to 0.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;ACK&lt;/b&gt; occurs when the SDA is 1 and SCL goes 0 to 1.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;(Ack bit always flows opposite towards the data bit.)&lt;/span&gt;&lt;/div&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg29lReMegSUawrxwzGtVtgVZh2eXJZOQR4yv8TYkty7DCPum4hJuBu6Lv54VmXGnFxCE6X3_JWJ9Nm6NNwMbHpz3jyeECxXvvfii9mSVETo6LMrtfcghECwnXs5D-XYHKWexi8gYYwnQ/s1600/I2C+schematic.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img alt=&quot;The diagram shows how the bus achieves 0 or 1.&quot; border=&quot;0&quot; data-original-height=&quot;638&quot; data-original-width=&quot;1416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg29lReMegSUawrxwzGtVtgVZh2eXJZOQR4yv8TYkty7DCPum4hJuBu6Lv54VmXGnFxCE6X3_JWJ9Nm6NNwMbHpz3jyeECxXvvfii9mSVETo6LMrtfcghECwnXs5D-XYHKWexi8gYYwnQ/s1600/I2C+schematic.png&quot; title=&quot;The diagram shows how the bus achieves 0 or 1.&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The diagram shows how the bus achieves 0 or 1.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;There are two pull up resistors and two open collector BJT transistors are connected to two bus lines. Let&#39;s consider the transistors are switches when the transistor goes OFF the current flow from the Vdd makes the bus active. when the transistor goes ON&amp;nbsp; transistor grounded the Vdd current and makes inactive to the BUS.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;How Multi-master works on a single bus at the same time?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Arbitration:-&lt;/b&gt; By constantly monitoring the bus a master can determine the bus condition either it is ideal or busy. If busy it delays its transfer until the stop bit. If multiple masters start transferring the data at the same time, whoever sends zero first that wins. This is called&amp;nbsp; Arbitration.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHOOC5zNpoT7wLBLCn8IDCl3_pKfn0QJJV0nMR9nuyBpCqmSx5vT93V3LKSsmXMIomRz8O5mdv8KSOGVonxLc3WEUHJnb2AvHc7hyPsuj-3yReRetrESlJlhZo_5QH6qxtINY-c4jQmVo/s1600/I2C_Arbitration.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;638&quot; data-original-width=&quot;1416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHOOC5zNpoT7wLBLCn8IDCl3_pKfn0QJJV0nMR9nuyBpCqmSx5vT93V3LKSsmXMIomRz8O5mdv8KSOGVonxLc3WEUHJnb2AvHc7hyPsuj-3yReRetrESlJlhZo_5QH6qxtINY-c4jQmVo/s1600/I2C_Arbitration.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;In the above figure, 3 Masters are try to send the slave address through the bus simultaneously. So All 3 masters send the first MSB. Although all having their MSB 1, so no one can lose its arbitration. When any master sends the 0 bit first then it wins the arbitration and able to send its slave address through the bus.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Clock Stretching:- &lt;/b&gt;Slave device may hold the clock line low after receiving a byte. Which indicates slave is not ready to receive data. So the master waits until the clock goes high.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Advantage:-&lt;/b&gt; Due to device addressing no chip select pin is required. Better error handling with ACK bit.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Disadvantage:-&lt;/b&gt; Slow-speed because of the frame overhead due to device address bit and ACK bit. S&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;peed is up to 3.4MHz clock(high-speed mode).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Similar Topics:-&lt;/span&gt;&lt;/div&gt;
&lt;h1 class=&quot;post-title entry-title&quot; itemprop=&quot;name headline&quot; style=&quot;background-color: white; font-family: oswald; font-weight: 400; line-height: 44px; margin: 0px; outline: 0px; padding: 0px; position: relative; transition: all 0.3s ease 0s;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/10/protocols-in-electronics.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;PROTOCOLS IN ELECTRONICS&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/8222297208969532603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/8222297208969532603'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2019/12/i2c-protocol.html' title='I2C PROTOCOL'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1c405BXXbJZNqQPZf5qf7h9L_3lT1mECfwm_WmQqXgXSkbCXfqjJjSugVZGHQuY5C_Rp0Mr9svkbOHneQ1F4TAYNKs8A5vY_ZU20mKCxn6_wbYu5ZPX7RUL7AQPQ0pWJ4PXA3W4MOlHQ/s72-c/I2C+Protocol.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-3995862139104314714</id><published>2019-12-23T03:46:00.000-08:00</published><updated>2025-06-22T09:05:22.638-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ARM"/><title type='text'>ADDRESSING MODES IN ARM 7</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The manner in which an operand is given in the instruction is called addressing mode. The operand is the value on which you want to operate.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;We can add 25 with the register R0 and put the result inside R0, or we can move the value to a register and then add the two register. Or we put the value into any memory and give its address to add and so on and so forth,&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;For Example:-&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;ADD R0, #25H;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;MOV R1, #25H;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;ADD R0, R1;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;MOV 45H, #25H;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;ADD R0, 45H;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;So how do I tell the processor that my operand is 25 that is called addressing mode. There is various addressing modes are possible.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIuU7dFAgeRH1IRv8bELdOieek7G8eU7Zbiz53_KYEiGIukflE43tqJ49-NwAHFPRjZJOWP56Cvbb5fqETrLvyTJw78QmesLPHP6h9ZgkZvmeILUJ6Kh7LdsO2kTLZAW95_n7HOMf1m30/s1600/Arm7_Addressing_modes.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img alt=&quot;Addressing modes in ARM7&quot; border=&quot;0&quot; data-original-height=&quot;890&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIuU7dFAgeRH1IRv8bELdOieek7G8eU7Zbiz53_KYEiGIukflE43tqJ49-NwAHFPRjZJOWP56Cvbb5fqETrLvyTJw78QmesLPHP6h9ZgkZvmeILUJ6Kh7LdsO2kTLZAW95_n7HOMf1m30/s1600/Arm7_Addressing_modes.png&quot; title=&quot;Addressing modes in ARM7&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;1. Immediate Addressing Mode:-&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;When the data is given in the instruction. ADD R0, #25H, Here the data 25 is given in that instruction. so no extra time required to search for the data. hence it is called immediate addressing mode.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;MOV R0, #25H;&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R0 gets data value 25H&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;ADD R0, R1, #25H;&amp;nbsp;&lt;/b&gt; &amp;nbsp; &amp;nbsp;R0 gets Value of R1 + data value 25H&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Note:- If there is &#39;#&#39; at the beginning of any number then is a data or else it is an address.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;We know that every instruction is of 32bit so we can only put the 8bit value inside the instruction. because the total size of one instruction is 32bit. If we put a 32bit value inside the instruction then the value itself take all size of instruction there is no space for upcode and register. So in immediate addressing mode always the 8bit value us allowed.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;2. Register Addressing:-&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Now instead of giving data in the instruction, we give the data using the register.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;MOV&amp;nbsp; R0, R1;&amp;nbsp;&lt;/b&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;R0 gets R1 value&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;ADD R0, R1, R2;&amp;nbsp;&lt;/b&gt; &amp;nbsp; R0 gets the sum of R1 and R2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;From now we give the data using the memory address.&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;As we know the only operations are performed by memory are load and store. Hence next 5 Addressing modes are only applicable for Load and Store operations.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Now the address is going to give the data. When data is in memory.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;3. Direct Addressing modes:-&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Here&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;the address is going to give the data, When data is in memory.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;&quot;Var&quot; is the variable that may be assigned with some value. Then Assembler will substitute the address. Remember the address is 32 bit. So assembler will not put the 32bit address. It put the 12-bit Offset. Offset not gives the actual address, it gives the distance from the current location to the location of the variable. 12bit can give the value up to 4k location.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;LDR&amp;nbsp; R0, Var;&amp;nbsp;&lt;/b&gt;R0 gets data from memory location “Var”&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;STR&amp;nbsp; R0, Var;&amp;nbsp;&lt;/b&gt;R2 will be stored at the memory location “Var”&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Note: “Var” is a variable defined in memory&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;4. Indirect&amp;nbsp;&lt;/b&gt;&lt;b&gt;Addressing modes&lt;/b&gt;&lt;b&gt;:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;If the variable address is out of the range 4k then put the address in a register and give the register in indirect addressing mode.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Td7FLThiXiie4K232nr6cujZ8C7haKoDgic212ajqSVQ6V4gdc0dDd0upo1QmPUSwe7Ye7Zi3ebUeWeD1T6lqncfCmFs1hUM08_DzTlVjVe4YFOzN2Bnfy-51paIk50tsy47txPelOA/s1600/IndirectAddr.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img alt=&quot;Indirect Addressing mode in ARM&quot; border=&quot;0&quot; data-original-height=&quot;638&quot; data-original-width=&quot;1416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Td7FLThiXiie4K232nr6cujZ8C7haKoDgic212ajqSVQ6V4gdc0dDd0upo1QmPUSwe7Ye7Zi3ebUeWeD1T6lqncfCmFs1hUM08_DzTlVjVe4YFOzN2Bnfy-51paIk50tsy47txPelOA/s1600/IndirectAddr.png&quot; title=&quot;Indirect Addressing mode&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;R1:&lt;/b&gt;&amp;nbsp;- It gives the value.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;[R1]:&amp;nbsp;&lt;/b&gt;- It gives the address.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;LDR&amp;nbsp; R0, [R1];&lt;/b&gt;&amp;nbsp; R0 gets the value pointed by the address inside the register R1.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;STR&amp;nbsp; R0, [R1];&lt;/b&gt; The address inside the register R1 is going to get the value of R0.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;And another use of Indirect addressing mode is while we use in a loop and increment the Address for each loop, It is sure that each time it can access the next location.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;The next 3 Addressing modes are just the extension of the indirect Addressing mode. And each mode has 3 versions.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;5. Register Relative&lt;/b&gt;&amp;nbsp;&lt;b&gt;Addressing modes&lt;/b&gt;:-&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Here address of the memory operand is given by a register plus a numeric displacement.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1, #05H] ;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;R0 gets&amp;nbsp; data from the memory location pointed by (R1 + 05H)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;R1 remains unchanged.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1, #05H]!&lt;/b&gt; ;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;First: R1 gets R1 + 05H&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Then: R0 gets data from the new memory location pointed by R1.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is called &lt;b&gt;PRE-INDEX&lt;/b&gt; Addressing.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1], #05H ;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;First: R0 gets&amp;nbsp; data from memory location pointed by R1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Then: R1 gets&amp;nbsp; R1 + 05H&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is called &lt;b&gt;POST-INDEX&lt;/b&gt; Addressing.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;6. Base Indexed&amp;nbsp;&lt;/b&gt;&lt;b&gt;Addressing modes&lt;/b&gt;&lt;b&gt;:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Here address of the memory operand is given by a sum of two registers, where one register&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;acts as the base, and the other acts as the index register.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1, R2];&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;R0 gets&amp;nbsp; data from the memory location pointed by (R1 + R2)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;R1 remains unchanged.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1, R2]! ;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;First: R1 gets&amp;nbsp; R1 + R2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Then: R0 ç data from the new memory location pointed by R1.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is called &lt;b&gt;PRE-INDEX&lt;/b&gt; Addressing.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1], R2;&lt;/b&gt; First: R0 get data from the memory location pointed by R1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Then: R1 gets R1 + R2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is called &lt;b&gt;POST-INDEX&lt;/b&gt; Addressing.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;7. Base with scaled Index&amp;nbsp;&lt;/b&gt;&lt;b&gt;Addressing modes&lt;/b&gt;&lt;b&gt;:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Here address of the memory operand is given by a sum of two registers&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The first register acts as a base register. The second register can be scaled by shifting left.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1, R2, LSL #2];&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;R0 gets&amp;nbsp;&amp;nbsp;data from the location pointed by (R1 + R2 left-shifted by 2)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;R1 remains unchanged.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1, R2, LSL #2]!;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;First: R1 gets R1 + R2 left-shifted by 2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Then: R0 gets data from the new memory location pointed by R1.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is called &lt;b&gt;PRE-INDEX&lt;/b&gt; Addressing.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Eg: &lt;b&gt;LDR R0, [R1], R2, LSL #2;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;First: R0 gets&amp;nbsp;&amp;nbsp;data from the memory location pointed by R1&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Then: R1 gets&amp;nbsp;&amp;nbsp;R1 + R2 left-shifted by 2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;This is called &lt;b&gt;POST-INDEX&lt;/b&gt; Addressing.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Use of base with scaled index:-&lt;/b&gt;&amp;nbsp; for example, we want data from location 0x1256. Then we assign a register r1 with 12 and register r2 with 56 then we use the addressing mode.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;LDR R0, [R1, R2, LSL #8];&amp;nbsp;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;It first left shift the 12 by 8bits and the add the register r2 with r1. now, r1 is pointing to the address 0x1256. Hence r0 get the value from the address 0x1256 that pointed by r1.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;h1 class=&quot;post-title&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; font-family: &amp;quot;roboto slab&amp;quot;, sans-serif; line-height: 1.5em; margin: 0px 0px 13px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/08/interupts-in-arm-7.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/3995862139104314714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/3995862139104314714'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2019/12/addressing-modes-in-arm-7.html' title='ADDRESSING MODES IN ARM 7'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIuU7dFAgeRH1IRv8bELdOieek7G8eU7Zbiz53_KYEiGIukflE43tqJ49-NwAHFPRjZJOWP56Cvbb5fqETrLvyTJw78QmesLPHP6h9ZgkZvmeILUJ6Kh7LdsO2kTLZAW95_n7HOMf1m30/s72-c/Arm7_Addressing_modes.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-2015040892584080612</id><published>2019-11-03T01:30:00.000-07:00</published><updated>2020-08-03T10:18:08.283-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ARM"/><title type='text'>REGISTERS IN ARM 7</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;There are 7 modes of operations. In each mode, the programmer has access to 16 GPRS (R0 – R15) and a CPSR (Flag Reg). Additionally, a Saved PSR (SPSR) is also available in all modes except User/ System mode. All registers are of 32 bits. In all modes, the three registers have common functions.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl4gWRF2P5zQ-WJEfKNkaizqadtBcuVhs-q80xjMwzx4vpUKZMOltQ1-_AMudfO760c8RhWeZYdsEPBXpvdGQcFEicg-K3QA4e7Uo5NLtBM2neqlBHl1PSYjJcUgS6rvhT9LvC-6Wbh7E/s1600/ARM_registers.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1198&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl4gWRF2P5zQ-WJEfKNkaizqadtBcuVhs-q80xjMwzx4vpUKZMOltQ1-_AMudfO760c8RhWeZYdsEPBXpvdGQcFEicg-K3QA4e7Uo5NLtBM2neqlBHl1PSYjJcUgS6rvhT9LvC-6Wbh7E/s1600/ARM_registers.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;R15: PC (Program Counter)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;PC gives a 32-bit address of the instruction to be fetched.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;This address is put on the address bus and the instruction is fetched from the memory through&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;the 32-bit data bus. PC is periodically incremented after every instruction is fetched.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Since all instructions are of 32-bits and are stored at 32-bit aligned locations (multiples of 4), the&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;lowest two bits of PC are insignificant (XX).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;R14: LR (Link Register)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;It stores the return address (value of PC) when we perform a BL instruction (Branch with the link,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;like a CALL instruction). While returning back to the main program the value of LR will be put back&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;into PC.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;R13: SP (Stack Pointer)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Holds the address of the top of the stack.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;CPSR (Current program status register):&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;It holds the current status of the program.&amp;nbsp; When an exception/ interrupt occurs, the value of CPSR is saved into SPSR (Saved Program Status Register), before invoking the ISR. While returning back to the main program, the value of SPSR is put back into CPSR to restore the previous state of the original program.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcE7PZeHXS1tzo6PAhagDHHXDBSipLLryjzjii6vCOn39fyqN3GbtwFnjvpjaWGnx2Id9ZMEJyHZvZZuMjoN0AiSgyXDe8YcKvSL1xbj6hcyNGw7ss935hhoInYV9Y3Hz4hpkGXjn7caU/s1600/ARM_cpsr.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;435&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcE7PZeHXS1tzo6PAhagDHHXDBSipLLryjzjii6vCOn39fyqN3GbtwFnjvpjaWGnx2Id9ZMEJyHZvZZuMjoN0AiSgyXDe8YcKvSL1xbj6hcyNGw7ss935hhoInYV9Y3Hz4hpkGXjn7caU/s1600/ARM_cpsr.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;CPSR (Current program status register) holds the current status of the program.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;When an exception/ interrupt occurs, the value of CPSR is saved into SPSR (Saved Program Status&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Register), before invoking the ISR. While returning back to the main program, the value of SPSR is put back into CPSR to restore the previous state of the original program.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Mode Bits:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;ARM7 can operate in 7 different operating modes.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;These bits indicate the current operating mode of the processor.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-dRrGPC6DLFq2-wUODtD9vI08FW14m9PcahGO6qo7Rf0cSHRJFELGYdYuWOfBPYR4ULueuKK_2qI5iVhzHDdh053q2fKaNPXFOjqKRDmx9YwZ2ELrKj-kMZgG0XIjDsoOq6Sum9o79gM/s1600/ARM_modes.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;540&quot; data-original-width=&quot;1384&quot; height=&quot;248&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-dRrGPC6DLFq2-wUODtD9vI08FW14m9PcahGO6qo7Rf0cSHRJFELGYdYuWOfBPYR4ULueuKK_2qI5iVhzHDdh053q2fKaNPXFOjqKRDmx9YwZ2ELrKj-kMZgG0XIjDsoOq6Sum9o79gM/s640/ARM_modes.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;All modes except User mode, are called “Privileged Modes”.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;T: Thumb State&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If T = 1, then the processor is in Thumb state&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If T = 0, then the processor is in normal ARM7 state.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Thumb state is a special state where the “Thumb” instruction set, having 6-bit instructions are used.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;This is useful if the memory is implemented as a 16-bit memory.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;F: Fast interrupt Mask&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If F = 1, then Fast Interrupts are disabled (masked).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If F = 0, then Fast Interrupts are enabled (un-masked).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A fast interrupt occurs through the nFIQ pin.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;I: Interrupt Request Mask&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If I = 1, then normal Interrupts are disabled (masked).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If I = 0, then normal Interrupts are enabled (un-masked).&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;A normal interrupt occurs through the nIRQ pin.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Condition Flags:-&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;V: Overflow Flag&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;V = 1 means signed overflow occurred&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;V = 0 means signed overflow hasn’t occurred&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;C: Carry Flag&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;C = 1 means carry after MSB&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;C = 0 means no carry after MSB&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Z: Zero Flag&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Z = 1 means the result is zero.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Z = 0 means the result is non-zero.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;N: Negative Flag&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If N = 1, the result is negative&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If N = 0, the result is positive.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;(Note: This flag always indicates the correct sign in spite of an overflow, unlike Intel’s Sign flag.)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Bit No 27: Saturation Flag / Q flag&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;In “E” versions of ARM7 (DSP Extensions), this flag indicates if a “saturation” has occurred.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If Q = 1, then arithmetic saturation has occurred. (All 1s rolls over to All 0s)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;If Q = 0, then no such saturation has occurred.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;This is useful in some signal processing applications.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;(Note: Not applicable in ARM7TDMI, hence not shown in the diagram)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Additionally, there are some Banked Registers that are available in specific operating modes.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;FIQ mode:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;R8 – R14 provides a fresh set of GPRS.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;This eliminates the need to store the original values of these registers elsewhere and hence&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;makes the execution of the ISR faster.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;All the other privileged modes get their own versions of SP and LR (R13 and R14).&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;This gives a total of 37 registers all 32-bits each.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large; text-align: justify;&quot;&gt;Also, Read👇&lt;/span&gt;&lt;br /&gt;
&lt;h1 class=&quot;post-title&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; font-family: &amp;quot;roboto slab&amp;quot;, sans-serif; line-height: 1.5em; margin: 0px 0px 13px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/07/introduction-to-arm-7.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;INTRODUCTION TO ARM 7&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h1 class=&quot;post-title&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; font-family: &amp;quot;roboto slab&amp;quot;, sans-serif; line-height: 1.5em; margin: 0px 0px 13px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/07/cisc-vs-risc-architecture.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;CISC VS. RISC ARCHITECTURE&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h1 class=&quot;post-title&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; font-family: &amp;quot;roboto slab&amp;quot;, sans-serif; line-height: 1.5em; margin: 0px 0px 13px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/08/operating-modes-in-arm-7.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;OPERATING MODES IN ARM 7&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h1 class=&quot;post-title&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; font-family: &amp;quot;roboto slab&amp;quot;, sans-serif; line-height: 1.5em; margin: 0px 0px 13px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/08/work-flow-of-arm.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;WORKFLOW OF ARM 7&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;h1 class=&quot;post-title&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; font-family: &amp;quot;roboto slab&amp;quot;, sans-serif; line-height: 1.5em; margin: 0px 0px 13px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/08/interupts-in-arm-7.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;INTERRUPTS IN ARM 7&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;div&gt;
&lt;h1 class=&quot;post-title&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; font-family: &amp;quot;roboto slab&amp;quot;, sans-serif; line-height: 1.5em; margin: 0px 0px 13px; outline: 0px; padding: 0px; position: relative; text-align: left; vertical-align: baseline;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/12/addressing-modes-in-arm-7.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;ADDRESSING MODES IN ARM 7&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2015040892584080612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/2015040892584080612'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2019/11/registers-in-arm-7.html' title='REGISTERS IN ARM 7'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl4gWRF2P5zQ-WJEfKNkaizqadtBcuVhs-q80xjMwzx4vpUKZMOltQ1-_AMudfO760c8RhWeZYdsEPBXpvdGQcFEicg-K3QA4e7Uo5NLtBM2neqlBHl1PSYjJcUgS6rvhT9LvC-6Wbh7E/s72-c/ARM_registers.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-8490579791758599648</id><published>2019-10-06T09:36:00.000-07:00</published><updated>2020-08-03T21:09:14.179-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Embedded System"/><category scheme="http://www.blogger.com/atom/ns#" term="Protocols"/><title type='text'>PROTOCOLS IN ELECTRONICS</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Protocol Meaning:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Generally, protocol means a set of rules and regulations that should be obeyed for communication.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;For example:- Two people A and B want to communicate with each other. But A is from German and B is from France. For a better conversation, they must have to follow one rule i.e they need to communicate over a common language(e.g:- English) which is a common protocol between them. Similarly, in Software, there are different protocols for different communication. Like for network or internet communication there some protocols called TCP/IP, HTTP, FTP, SMTP, etc.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuTnakqlmNMRwl_tCOU6ivIKZ9BGZgyGsiisNpoykPml-bXo3XdYyILGIqasfFD6aE7jHRqMU8n0mlHspI3hOoDTAcbvsx8ZEpnNQ3IzhcvvL2Xsiehnu-A62XS3EO0GhvFISoo89ViwM/s1600/Protocols.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;959&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuTnakqlmNMRwl_tCOU6ivIKZ9BGZgyGsiisNpoykPml-bXo3XdYyILGIqasfFD6aE7jHRqMU8n0mlHspI3hOoDTAcbvsx8ZEpnNQ3IzhcvvL2Xsiehnu-A62XS3EO0GhvFISoo89ViwM/s1600/Protocols.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;In Electronics, they have some set of rules and regulations (protocol) to communicate between two electronic devices and exchange data between them.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;There are two types:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;1. Inter System protocols&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;2. Intra system Protocols&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Inter System&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;protocols&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;font-family: georgia, &amp;quot;times new roman&amp;quot;, serif;&quot;&gt;:-&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The communication between two different Electonic devices. Like communication between laptops and smartphones is called inter-system communication. And the protocol used for this kind of communication is called inter-board communication protocols. For example:-&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;UART Protocol&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;USART Protocol&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;USB Protocol&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7GkTDYTZEJtVLSEM3JTQz7hUMBwScguOsF-z0u4yDr5k3p9lOvKQqQIJvZfAG9IYs7nSJR74Jx8duZUKq4zek9bJKHTHR3fMHMVVyx9zfQbR-VsNelz2wEnenbjxFeFPgiohbLTEgqNk/s1600/Protocols1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;997&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7GkTDYTZEJtVLSEM3JTQz7hUMBwScguOsF-z0u4yDr5k3p9lOvKQqQIJvZfAG9IYs7nSJR74Jx8duZUKq4zek9bJKHTHR3fMHMVVyx9zfQbR-VsNelz2wEnenbjxFeFPgiohbLTEgqNk/s1600/Protocols1.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;Intra System&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;protocols&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif;&quot;&gt;:-&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The communication between two electronic devices within a circuit board. Like communication between motherboard and harddisk inside your laptop, microcontroller and LED is called intra-system communication. And the protocol used for this kind of communication is called intra-board communication protocols. For example:-&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;I2C protocol&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;SPI protocol&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;CAN Protocol&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcQ50kBCEqnmV6UPlyDeCs-_nV2nSacJmgoyNzQGtAVS48qC3aWj6Ap0Cx-ddla1RcaFA-nGiXkXj-z1eW2LmTfoIxhlQjGrPtv5Bs21o8n3NhFkAG0GyWnmlCSBNNE1sBvwUI6jBHiaE/s1600/Protocols2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;997&quot; data-original-width=&quot;1600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcQ50kBCEqnmV6UPlyDeCs-_nV2nSacJmgoyNzQGtAVS48qC3aWj6Ap0Cx-ddla1RcaFA-nGiXkXj-z1eW2LmTfoIxhlQjGrPtv5Bs21o8n3NhFkAG0GyWnmlCSBNNE1sBvwUI6jBHiaE/s1600/Protocols2.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The above table describes the difference between all three IntraSystem protocols.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;See Next Topics:-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h1 class=&quot;post-title entry-title&quot; itemprop=&quot;name headline&quot; style=&quot;background-color: white; font-family: oswald; font-weight: 400; line-height: 44px; margin: 0px; outline: 0px; padding: 0px; position: relative; transition: all 0.3s ease 0s;&quot;&gt;
&lt;a href=&quot;https://linuxbaya.blogspot.com/2019/12/i2c-protocol.html&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;I2C PROTOCOL&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/8490579791758599648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/8490579791758599648'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2019/10/protocols-in-electronics.html' title='PROTOCOLS IN ELECTRONICS'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuTnakqlmNMRwl_tCOU6ivIKZ9BGZgyGsiisNpoykPml-bXo3XdYyILGIqasfFD6aE7jHRqMU8n0mlHspI3hOoDTAcbvsx8ZEpnNQ3IzhcvvL2Xsiehnu-A62XS3EO0GhvFISoo89ViwM/s72-c/Protocols.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-1991064452605375718.post-5128400961807674269</id><published>2019-09-01T10:20:00.000-07:00</published><updated>2025-06-22T09:15:54.187-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ARM"/><title type='text'>PIPELINING CONCEPT IN ARM 7</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Pipelining means dividing the process of instruction into an independent section and overlap them to get better performance. And the 3 stage Pipelining defines fetch-decode-execute. First, fetch the instruction, then decode the instruction, third execute that instruction. this is the complete process.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSnaP11NDPLf2V_39VA4G84CrgZqZaL-KO7IessXpAS-pvoFtN5XWK8NM0wIPVLgOkpm7byVly8G-nbfwKmimh7DPeu5CWAO3-WUH1U5HXc0_9pq84ZdO9J-mHFLrZu_U9gRft73HEjV4/s1600/pipelining971.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQLWhMsSHsI9mcNq4vL_meABJmVoLLyh49EjXJDG6KKKO5D7cE1l6QZvdu5-WOECrWSN7cOB52T0GrSAWJ0_jMiKTi6pDKTTM9RNXwmGb0AXKq89TWb-VscCL0zcjZENvzsz-pUGuaAHc/s1600/pipelining.gif&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;734&quot; data-original-width=&quot;1220&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQLWhMsSHsI9mcNq4vL_meABJmVoLLyh49EjXJDG6KKKO5D7cE1l6QZvdu5-WOECrWSN7cOB52T0GrSAWJ0_jMiKTi6pDKTTM9RNXwmGb0AXKq89TWb-VscCL0zcjZENvzsz-pUGuaAHc/s1600/pipelining.gif&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;How does ARM acquire the Pipelining concept..?&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;It divides the total work complete to 3 independent parts (fetch, decode, execute) and overlap them.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div style=&quot;text-align: justify; text-indent: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Fetch the first instruction in one cycle, then decode the fetching instruction and fetch the next instruction in one cycle. Now execute the decoded instruction and decode the fetching instruction in one cycle and also fetch the 3rd instruction in the same cycle. It is only possible when each of the three only needs one cycle for its operation. Then only we can fetch, decode, and execute 3 different instructions in one cycle. It gives better performance. On the above diagram, you can see the ARM process seven instructions where normal processor executes only 3.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK1BLi7eadvDudN5y3Xffr5UWmYdxjuG1I3WQ8UssFb_dbg7obVEQzmPleViRQiCmo-l1n2il1he8NGap0ZL_NP7TW4p6B92nTQQtPh_xFtabwZzjvMmabeEnRon2NZR8dUZmec8HlfRQ/s1600/pipelining.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;img alt=&quot;ARM pipelining&quot; border=&quot;0&quot; data-original-height=&quot;780&quot; data-original-width=&quot;1312&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK1BLi7eadvDudN5y3Xffr5UWmYdxjuG1I3WQ8UssFb_dbg7obVEQzmPleViRQiCmo-l1n2il1he8NGap0ZL_NP7TW4p6B92nTQQtPh_xFtabwZzjvMmabeEnRon2NZR8dUZmec8HlfRQ/s1600/pipelining.png&quot; title=&quot;ARM pipelining&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;The concept of the Pipeline only gives efficiency when all independent jobs (fetching, decoding, and executing) are done at the same time (1 cycle). Suppose there are 3 instructions, only the second instruction needs 2 cycles to decode. When the execution of first instruction will finish, the decode of second instruction is supposed to finish, but it requires one more cycle to fully decode for which that stage not able to execute the second instruction.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;That&#39;s why ARM supports almost all instructions that require only one cycle to fetch, decode, and execute. And am going to prove that all these stages require only one cycle.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-weight: 400;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Fetching:-&lt;/b&gt;&amp;nbsp; Instruction sets of ARM are 32 bit. And the most important is everything in ARM memory is in aligned form. Databus is also 32 bit. So Everything needs only 1 cycle to fetch.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-weight: 400;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Decoding:-&lt;/b&gt; ARM is a RISC processor. All instructions are reduced and simplified. Upcodes are simple. They are decoded using the hardwired control unit which is very fast. Hence the decode needs only one cycle.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-weight: 400;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;b&gt;Execution:-&lt;/b&gt; ARM supports memory-based operation only load and store. Load means getting data. The size of the data can be 32 bit(maximum). The data bus is 32 bit. So load requires one cycle. All arithmetic and logical operations happen on the register. Registers are 32-bit Operations are 32 bit and ALU is 32 bit. So every operation requires one cycle. Store means to store the data of register to memory through the data bus. All registers are 32 bit and the data bus is also 32 bit. so the store also requires one cycle. Hence all kinds of execution require only one cycle to execute.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;Of course, there are one or two exceptions like multi-load and multi-store that require more than one cycle. But we can say 95% of ARM instructions are required one cycle for fetching, one cycle for decoding, and one cycle for executing.&amp;nbsp; If anything takes more time then the 3 times multiplication performance will not happen.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-style: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;The advantage of the Pipeline in ARM is fast execution. The disadvantage&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&amp;nbsp;in ARM is Pipeline fails if there is a branch. for example, the second instruction is executing and the expectation is in the next stage the third instruction will be executed because side by side it is decoded. if the third instruction takes a jump to any other instruction then all are wasted. Again we need to fetch the new instruction and again we need to decode that instruction. So this is called the pipeline bubble.&amp;nbsp; Whenever a branch takes place the pipeline can not give the performance that we expect. This is a drawback of the ARM pipeline. But there is an Algorithm called&amp;nbsp;branch prediction algorithm it can avoid the that used in the Pentium processor.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;georgia&amp;quot; , &amp;quot;times new roman&amp;quot; , serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;color: black; font-family: &amp;quot;times new roman&amp;quot;; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/5128400961807674269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1991064452605375718/posts/default/5128400961807674269'/><link rel='alternate' type='text/html' href='http://www.linuxbaya.in/2019/09/pipelining-concept-in-arm-7.html' title='PIPELINING CONCEPT IN ARM 7'/><author><name>LinuxBaya</name><uri>http://www.blogger.com/profile/04652858055670475244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQLWhMsSHsI9mcNq4vL_meABJmVoLLyh49EjXJDG6KKKO5D7cE1l6QZvdu5-WOECrWSN7cOB52T0GrSAWJ0_jMiKTi6pDKTTM9RNXwmGb0AXKq89TWb-VscCL0zcjZENvzsz-pUGuaAHc/s72-c/pipelining.gif" height="72" width="72"/></entry></feed>