<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[الفريق العربي للهندسة العكسية - البرمجة بلغة السى و السى بلس بلس ++C & C ]]></title>
		<link>https://www.at4re.net/f/</link>
		<description><![CDATA[الفريق العربي للهندسة العكسية - https://www.at4re.net/f]]></description>
		<pubDate>Wed, 08 Apr 2026 08:45:54 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[استفسار بخصوص kernel mode]]></title>
			<link>https://www.at4re.net/f/thread-5016.html</link>
			<pubDate>Wed, 21 Jan 2026 16:14:53 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=6523">mr.gedo</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-5016.html</guid>
			<description><![CDATA[السلام عليكم ورحمة الله وبركاته<br />
 كنت حابب أسأل هل البرمجة أو التعامل مع الـ <span style="font-weight: bold;" class="mycode_b">Kernel Mode</span> آمن ولا فيه مخاطر؟<br />
وهل حد هنا اشتغل أو جرب يبرمج على مستوى الـ Kernel قبل كده، زي كتابة Drivers مثلاً؟<br />
ولو في، إيه أكتر مشاكل قابلتكم مقارنة بالـ User Mode؟]]></description>
			<content:encoded><![CDATA[السلام عليكم ورحمة الله وبركاته<br />
 كنت حابب أسأل هل البرمجة أو التعامل مع الـ <span style="font-weight: bold;" class="mycode_b">Kernel Mode</span> آمن ولا فيه مخاطر؟<br />
وهل حد هنا اشتغل أو جرب يبرمج على مستوى الـ Kernel قبل كده، زي كتابة Drivers مثلاً؟<br />
ولو في، إيه أكتر مشاكل قابلتكم مقارنة بالـ User Mode؟]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[اكتب الكود. اضغط على تشغيل. شاهد النتائج فوراً]]></title>
			<link>https://www.at4re.net/f/thread-4979.html</link>
			<pubDate>Wed, 07 Jan 2026 08:00:11 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=6515">Coder_90</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4979.html</guid>
			<description><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">اكتب الكود. اضغط على تشغيل. شاهد النتائج فوراً.</span> <span style="font-weight: bold;" class="mycode_b">شغّل C++ مباشرة في متصفحك. بدون تثبيت، وبدون تسجيل. دعم لـ C++20 الحديثة مع Clang/LLVM. مجاني للجميع</span></span><br />
<br />
<br />
 <br />
<pre class="block-code line-numbers"><code class="language-none">https://playcode.io/cpp-compiler
</code></pre>]]></description>
			<content:encoded><![CDATA[<span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">اكتب الكود. اضغط على تشغيل. شاهد النتائج فوراً.</span> <span style="font-weight: bold;" class="mycode_b">شغّل C++ مباشرة في متصفحك. بدون تثبيت، وبدون تسجيل. دعم لـ C++20 الحديثة مع Clang/LLVM. مجاني للجميع</span></span><br />
<br />
<br />
 <br />
<pre class="block-code line-numbers"><code class="language-none">https://playcode.io/cpp-compiler
</code></pre>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Memory Signature Brute-Force Search Algorithm Supports ?? F? ?F]]></title>
			<link>https://www.at4re.net/f/thread-4941.html</link>
			<pubDate>Fri, 26 Dec 2025 04:40:47 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=4197">Lauda937</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4941.html</guid>
			<description><![CDATA[The core algorithm <br />
SSE2 requires hardware support, but a very small number of devices do not support it, so a purely software-based implementation is provided…<br />
<br />
① It supports wildcards and half-bytes at the beginning, middle, and end using a mask;<br />
② After finding the first element in the feature code byte sequence that is not '??', subsequent bytes are only compared for feature bytes that are not '??', thus optimizing the number of comparison bytes.<br />
<br />
Code:<br />
<br />
<pre class="block-code line-numbers"><code class="language-none">
#include &lt;iostream&gt;
#include &lt;windows.h&gt;
 
int main()
{
    //Simulate bytes of data in memory
    BYTE MemByte[] = { 0x33, 0xC9, 0x89, 0x0D, 0xB4, 0x67, 0x92, 0x77, 0x89, 0x0D, 0xB8, 0x67, 0x92, 0x77, 0x88, 0x08, 0x38, 0x48, 0x02, 0x74, 0x05, 0xE8, 0x94, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0xC3, 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x83, 0xE4, 0xF8 };
 
    //The signature is: ?9 ?? 0? ?? 67
    //This will be processed as: F9 FF 0F FF 67 for matching.
    std::string pattern = &quot;?9 ?? 0? ?? 67&quot;;
    int index = 0;
    while ((index = pattern.find(' ', index)) &gt;= 0) pattern.erase(index, 1); // Remove all spaces from the pattern signature
    size_t len ​​= pattern.length() / 2; // Calculate the pattern length
    size_t nFirstMatch = len; // Skip the header and record the position of the first match (half-character or non-`?`) to optimize the search.
    BYTE* pMarkCode = new BYTE[len]; // Store the converted feature code bytes
    BYTE* pWildcard = new BYTE[len]; // Stores wildcards (??=FF, ?=F, non-?=0) in the characteristic string.
 
    //Process the signature string and convert it into a byte array
    for (size_t i = 0; i &lt; len; i++)
    {
        std::string tmpStr = pattern.substr(i * 2, 2);
        if (&quot;??&quot; == tmpStr) // This is the characteristic character of &quot;??&quot;
        {
            tmpStr = &quot;FF&quot;;
            pWildcard[i] = 0xFF;
        }
        else // Not a character with the characteristic of &quot;??&quot;
        {
            if ('?' == tmpStr[0]) // The left half-byte is '?'
            {
                tmpStr[0] = 'F';
                pWildcard[i] = (0xF &lt;&lt; 4);
            }
            else if ('?' == tmpStr[1]) // The right half-byte is '?'
            {
                tmpStr[1] = 'F';
                pWildcard[i] = 0xF;
            }
            else
            {
                pWildcard[i] = 0x0;
            }
            if (nFirstMatch == len) nFirstMatch = i;
        }
 
        pMarkCode[i] = strtoul(tmpStr.c_str(), nullptr, 16);
    }
 
    // Search memory, matching feature code algorithm
    for (size_t m = 0; m &lt; sizeof(MemByte); ++m)
    {
        if (!((MemByte[m] | pWildcard[nFirstMatch]) ^ pMarkCode[nFirstMatch])) // Match the first byte
        {
            size_t offset = m - nFirstMatch; // Record the offset
            for (size_t n = nFirstMatch; n &lt; len; ++n) // Match subsequent bytes
            {
                if (offset &gt; sizeof(MemByte) - len) break; // Out of memory range
                if (pWildcard[n] != 0xFF) // If the following bytes are wildcards &quot;??&quot;, skip them. This line of code can optimize the search.
                    if ((MemByte[offset + n] | pWildcard[n]) ^ pMarkCode[n]) break; // Match failed
                if (n + 1 == len) // Match successful
                {
                    printf(&quot;%Ix\n&quot;, MemByte[m - nFirstMatch]);
                }
            }
        }
    }
    system(&quot;pause&quot;);
    return 0;
}

</code></pre>]]></description>
			<content:encoded><![CDATA[The core algorithm <br />
SSE2 requires hardware support, but a very small number of devices do not support it, so a purely software-based implementation is provided…<br />
<br />
① It supports wildcards and half-bytes at the beginning, middle, and end using a mask;<br />
② After finding the first element in the feature code byte sequence that is not '??', subsequent bytes are only compared for feature bytes that are not '??', thus optimizing the number of comparison bytes.<br />
<br />
Code:<br />
<br />
<pre class="block-code line-numbers"><code class="language-none">
#include &lt;iostream&gt;
#include &lt;windows.h&gt;
 
int main()
{
    //Simulate bytes of data in memory
    BYTE MemByte[] = { 0x33, 0xC9, 0x89, 0x0D, 0xB4, 0x67, 0x92, 0x77, 0x89, 0x0D, 0xB8, 0x67, 0x92, 0x77, 0x88, 0x08, 0x38, 0x48, 0x02, 0x74, 0x05, 0xE8, 0x94, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0xC3, 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x83, 0xE4, 0xF8 };
 
    //The signature is: ?9 ?? 0? ?? 67
    //This will be processed as: F9 FF 0F FF 67 for matching.
    std::string pattern = &quot;?9 ?? 0? ?? 67&quot;;
    int index = 0;
    while ((index = pattern.find(' ', index)) &gt;= 0) pattern.erase(index, 1); // Remove all spaces from the pattern signature
    size_t len ​​= pattern.length() / 2; // Calculate the pattern length
    size_t nFirstMatch = len; // Skip the header and record the position of the first match (half-character or non-`?`) to optimize the search.
    BYTE* pMarkCode = new BYTE[len]; // Store the converted feature code bytes
    BYTE* pWildcard = new BYTE[len]; // Stores wildcards (??=FF, ?=F, non-?=0) in the characteristic string.
 
    //Process the signature string and convert it into a byte array
    for (size_t i = 0; i &lt; len; i++)
    {
        std::string tmpStr = pattern.substr(i * 2, 2);
        if (&quot;??&quot; == tmpStr) // This is the characteristic character of &quot;??&quot;
        {
            tmpStr = &quot;FF&quot;;
            pWildcard[i] = 0xFF;
        }
        else // Not a character with the characteristic of &quot;??&quot;
        {
            if ('?' == tmpStr[0]) // The left half-byte is '?'
            {
                tmpStr[0] = 'F';
                pWildcard[i] = (0xF &lt;&lt; 4);
            }
            else if ('?' == tmpStr[1]) // The right half-byte is '?'
            {
                tmpStr[1] = 'F';
                pWildcard[i] = 0xF;
            }
            else
            {
                pWildcard[i] = 0x0;
            }
            if (nFirstMatch == len) nFirstMatch = i;
        }
 
        pMarkCode[i] = strtoul(tmpStr.c_str(), nullptr, 16);
    }
 
    // Search memory, matching feature code algorithm
    for (size_t m = 0; m &lt; sizeof(MemByte); ++m)
    {
        if (!((MemByte[m] | pWildcard[nFirstMatch]) ^ pMarkCode[nFirstMatch])) // Match the first byte
        {
            size_t offset = m - nFirstMatch; // Record the offset
            for (size_t n = nFirstMatch; n &lt; len; ++n) // Match subsequent bytes
            {
                if (offset &gt; sizeof(MemByte) - len) break; // Out of memory range
                if (pWildcard[n] != 0xFF) // If the following bytes are wildcards &quot;??&quot;, skip them. This line of code can optimize the search.
                    if ((MemByte[offset + n] | pWildcard[n]) ^ pMarkCode[n]) break; // Match failed
                if (n + 1 == len) // Match successful
                {
                    printf(&quot;%Ix\n&quot;, MemByte[m - nFirstMatch]);
                }
            }
        }
    }
    system(&quot;pause&quot;);
    return 0;
}

</code></pre>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[C code for oppenssl 3.5.2 x64 signature RSA signature verification]]></title>
			<link>https://www.at4re.net/f/thread-4940.html</link>
			<pubDate>Fri, 26 Dec 2025 04:34:54 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=4197">Lauda937</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4940.html</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">C code for oppenssl 3.5.2 x64 signature RSA signature verification, practice material for replacing the public key with a single byte.</span><span style="text-decoration: underline;" class="mycode_u"></span> <br />
<br />
Writing code is hard work, so please give it a like.<br />
This can be used by beginners to practice replacing public keys with one byte.<br />
MinGW x64 compilation command:<br />
<code class="inline-code">gcc verify_license.c -o verify_license.exe -ladvapi32</code>.<br />
Signature verification command: <code class="inline-code">verify_license.exe public_key.pem license_sig.bin data.txt</code>.<br />
<br />
<pre class="block-code line-numbers"><code class="language-none">
#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;stdint.h&gt;
 
// Define OpenSSL initialization flags
#define OPENSSL_INIT_LOAD_CONFIG         0x00000004L
#define OPENSSL_INIT_ADD_ALL_CIPHERS     0x00000004L
#define OPENSSL_INIT_ADD_ALL_DIGESTS     0x00000008L
#define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L
 
// Declare OpenSSL opaque struct type
typedef struct evp_md_ctx_st EVP_MD_CTX;
typedef struct bio_st BIO;
typedef struct evp_pkey_st EVP_PKEY;
typedef struct evp_pkey_ctx_st EVP_PKEY_CTX;
typedef struct engine_st ENGINE;
typedef struct evp_md_st EVP_MD;
typedef struct ossl_provider_st OSSL_PROVIDER;
 
// Define password callback type
typedef int (*pem_password_cb)(char* buf, int size, int rwflag, void* u);
 
// Define the minimal function pointer type
typedef EVP_MD_CTX* (*fp_EVP_MD_CTX_new)(void);
typedef void (*fp_EVP_MD_CTX_free)(EVP_MD_CTX* ctx);
typedef int (*fp_EVP_DigestVerifyInit)(EVP_MD_CTX* ctx, EVP_PKEY_CTX** pctx, const EVP_MD* type, ENGINE* e, EVP_PKEY* pkey);
typedef int (*fp_EVP_DigestVerifyUpdate)(EVP_MD_CTX* ctx, const void* d, size_t cnt);
typedef int (*fp_EVP_DigestVerifyFinal)(EVP_MD_CTX* ctx, const unsigned char* sig, size_t siglen);
typedef BIO* (*fp_BIO_new_mem_buf)(const void* buf, int len);
typedef int (*fp_BIO_free)(BIO* a);
typedef EVP_PKEY* (*fp_PEM_read_bio_PUBKEY)(BIO* bp, EVP_PKEY** x, pem_password_cb cb, void* u);
typedef void (*fp_EVP_PKEY_free)(EVP_PKEY* pkey);
typedef const EVP_MD* (*fp_EVP_sha256)(void);
typedef int (*fp_OPENSSL_init_crypto)(uint64_t opts, const void* settings);
typedef OSSL_PROVIDER* (*fp_OSSL_PROVIDER_load)(void* ctx, const char* name);
typedef int (*fp_OSSL_PROVIDER_unload)(OSSL_PROVIDER* prov);
 
// Global function pointer
static fp_EVP_MD_CTX_new EVP_MD_CTX_new = NULL;
static fp_EVP_MD_CTX_free EVP_MD_CTX_free = NULL;
static fp_EVP_DigestVerifyInit EVP_DigestVerifyInit = NULL;
static fp_EVP_DigestVerifyUpdate EVP_DigestVerifyUpdate = NULL;
static fp_EVP_DigestVerifyFinal EVP_DigestVerifyFinal = NULL;
static fp_BIO_new_mem_buf BIO_new_mem_buf = NULL;
static fp_BIO_free BIO_free = NULL;
static fp_PEM_read_bio_PUBKEY PEM_read_bio_PUBKEY = NULL;
static fp_EVP_PKEY_free EVP_PKEY_free = NULL;
static fp_EVP_sha256 EVP_sha256 = NULL;
static fp_OPENSSL_init_crypto OPENSSL_init_crypto = NULL;
static fp_OSSL_PROVIDER_load OSSL_PROVIDER_load = NULL;
static fp_OSSL_PROVIDER_unload OSSL_PROVIDER_unload = NULL;
static OSSL_PROVIDER* default_provider = NULL;
 
// Load OpenSSL functions (minimized version)
int init_openssl_functions(HMODULE hLib) {
    #define LOAD_FUNC(type, name) \
        name = (type)GetProcAddress(hLib, #name); \
        if (!name) { \
            printf(&quot;Failed to load function: %s\n&quot;, #name); \
            return 0; \
        }
 
    // Core verification function
    LOAD_FUNC(fp_EVP_MD_CTX_new, EVP_MD_CTX_new);
    LOAD_FUNC(fp_EVP_MD_CTX_free, EVP_MD_CTX_free);
    LOAD_FUNC(fp_EVP_DigestVerifyInit, EVP_DigestVerifyInit);
    LOAD_FUNC(fp_EVP_DigestVerifyUpdate, EVP_DigestVerifyUpdate);
    LOAD_FUNC(fp_EVP_DigestVerifyFinal, EVP_DigestVerifyFinal);
     
    // BIO functions
    LOAD_FUNC(fp_BIO_new_mem_buf, BIO_new_mem_buf);
    LOAD_FUNC(fp_BIO_free, BIO_free);
     
    // Key function
    LOAD_FUNC(fp_PEM_read_bio_PUBKEY, PEM_read_bio_PUBKEY);
    LOAD_FUNC(fp_EVP_PKEY_free, EVP_PKEY_free);
     
    // Hash function
    LOAD_FUNC(fp_EVP_sha256, EVP_sha256);
     
    // OpenSSL 3.0+ Initialization
    LOAD_FUNC(fp_OPENSSL_init_crypto, OPENSSL_init_crypto);
    LOAD_FUNC(fp_OSSL_PROVIDER_load, OSSL_PROVIDER_load);
    LOAD_FUNC(fp_OSSL_PROVIDER_unload, OSSL_PROVIDER_unload);
 
    // Initialize OpenSSL 3.0
    uint64_t init_flags = OPENSSL_INIT_LOAD_CONFIG | 
                         OPENSSL_INIT_ADD_ALL_CIPHERS |
                         OPENSSL_INIT_ADD_ALL_DIGESTS |
                         OPENSSL_INIT_LOAD_CRYPTO_STRINGS;
     
    if (OPENSSL_init_crypto(init_flags, NULL) == 0) {
        printf(&quot;OPENSSL_init_crypto failed\n&quot;);
        return 0;
    }
     
    // Load the default provider
    default_provider = OSSL_PROVIDER_load(NULL, &quot;default&quot;);
    if (!default_provider) {
        printf(&quot;Failed to load default provider\n&quot;);
        return 0;
    }
 
    return 1;
    #undef LOAD_FUNC
}
 
// Read binary file
int read_binary_file(const char* filename, unsigned char** data, size_t* len) {
    FILE* file = fopen(filename, &quot;rb&quot;);
    if (!file) {
        perror(&quot;Error opening file&quot;);
        return 0;
    }
 
    fseek(file, 0, SEEK_END);
    *len = ftell(file);
    fseek(file, 0, SEEK_SET);
 
    *data = (unsigned char*)malloc(*len);
    if (!*data) {
        fclose(file);
        printf(&quot;Memory allocation failed\n&quot;);
        return 0;
    }
 
    if (fread(*data, 1, *len, file) != *len) {
        fclose(file);
        free(*data);
        printf(&quot;Error reading file\n&quot;);
        return 0;
    }
 
    fclose(file);
    return 1;
}
 
// Correct PEM format
char* fix_pem_format(const char* pem_data) {
    const char* header = &quot;-----BEGIN&quot;;
    const char* footer = &quot;-----END&quot;;
     
    const char* begin = strstr(pem_data, header);
    if (!begin) return NULL;
     
    const char* end = strstr(pem_data, footer);
    if (!end) return NULL;
     
    end += strlen(footer);
    while (*end &amp;&amp; *end != '\n' &amp;&amp; *end != '\r') end++;
     
    size_t length = end - begin;
    char* fixed = (char*)malloc(length + 2);
    if (!fixed) return NULL;
     
    const char* src = begin;
    char* dst = fixed;
     
    while (src &lt; end) {
        if (*src == '\r') { src++; continue; }
        *dst++ = *src++;
    }
     
    if (*(dst-1) != '\n') *dst++ = '\n';
    *dst = '\0';
     
    return fixed;
}
 
// Read public key file
char* read_public_key_pem(const char* filename) {
    FILE* file = fopen(filename, &quot;r&quot;);
    if (!file) {
        perror(&quot;Error opening public key file&quot;);
        return NULL;
    }
 
    fseek(file, 0, SEEK_END);
    long file_size = ftell(file);
    fseek(file, 0, SEEK_SET);
 
    char* pem_data = (char*)malloc(file_size + 1);
    if (!pem_data) {
        fclose(file);
        return NULL;
    }
 
    fread(pem_data, 1, file_size, file);
    pem_data[file_size] = '\0';
    fclose(file);
 
    char* fixed_pem = fix_pem_format(pem_data);
    free(pem_data);
    return fixed_pem;
}
 
// Verify signature (minimum version)
int verify_signature(const char* plaintext, size_t text_len,
                    const unsigned char* signature, size_t sig_len,
                    const char* public_key_pem) {
    EVP_MD_CTX* ctx = NULL;
    BIO* bio = NULL;
    EVP_PKEY* pkey = NULL;
    int return = 0;
 
    if (!(bio = BIO_new_mem_buf(public_key_pem, -1))) {
        printf(&quot;Error creating BIO\n&quot;);
        goto cleanup;
    }
 
    if (!(pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) {
        printf(&quot;Error loading public key\n&quot;);
        goto cleanup;
    }
 
    if (!(ctx = EVP_MD_CTX_new())) {
        printf(&quot;Error creating EVP_MD_CTX\n&quot;);
        goto cleanup;
    }
 
    if (EVP_DigestVerifyInit(ctx, NULL, EVP_sha256(), NULL, pkey) &lt;= 0) {
        printf(&quot;Error initializing verification\n&quot;);
        goto cleanup;
    }
 
    if (EVP_DigestVerifyUpdate(ctx, plaintext, text_len) &lt;= 0) {
        printf(&quot;Error updating verification data\n&quot;);
        goto cleanup;
    }
 
    ret = (EVP_DigestVerifyFinal(ctx, signature, sig_len) == 1);
 
cleanup:
    if (ctx) EVP_MD_CTX_free(ctx);
    if (pkey) EVP_PKEY_free(pkey);
    if (bio) BIO_free(bio);
    return ret;
}
 
void print_search_paths() {
    char path[4096];
    if (GetEnvironmentVariableA(&quot;PATH&quot;, path, sizeof(path))) {
        printf(&quot;Current PATH: %s\n&quot;, path);
    }
}
 
int main(int argc, char** argv) {
    if (argc != 4) {
        printf(&quot;Usage: %s &lt;public_key.pem&gt; &lt;signature.bin&gt; &lt;data.txt&gt;\n&quot;, argv[0]);
        return 1;
    }
 
    // Attempt to load OpenSSL
    const char* dll_names[] = {
        &quot;libcrypto-3-x64.dll&quot;, // Windows default name
        &quot;libcrypto-3.dll&quot;, // Possible names for some installations
        NULL
    };
 
    HMODULE hLib = NULL;
    for (int i = 0; dll_names[i]; i++) {
        hLib = LoadLibraryA(dll_names[i]);
        if (hLib) break;
    }
 
    if (!hLib) {
        printf(&quot;Failed to load OpenSSL library. Tried:\n&quot;);
        for (int i = 0; dll_names[i]; i++) printf(&quot; - %s\n&quot;, dll_names[i]);
        print_search_paths();
        return 1;
    }
 
    if (!init_openssl_functions(hLib)) {
        FreeLibrary(hLib);
        return 1;
    }
 
    // Read file
    char* public_key = read_public_key_pem(argv[1]);
    if (!public_key) {
        printf(&quot;Invalid public key file\n&quot;);
        FreeLibrary(hLib);
        return 1;
    }
 
    unsigned char* signature = NULL;
    size_t sig_len = 0;
    if (!read_binary_file(argv[2], &amp;signature, &amp;sig_len)) {
        printf(&quot;Invalid signature file\n&quot;);
        free(public_key);
        FreeLibrary(hLib);
        return 1;
    }
 
    unsigned char* data = NULL;
    size_t data_len = 0;
    if (!read_binary_file(argv[3], &amp;data, &amp;data_len)) {
        printf(&quot;Invalid data file\n&quot;);
        free(public_key);
        free(signature);
        FreeLibrary(hLib);
        return 1;
    }
 
    // Verify signature
    if (verify_signature((const char*)data, data_len, signature, sig_len, public_key)) {
        printf(&quot;Signature VALID\n&quot;);
    } else {
        printf(&quot;Signature INVALID\n&quot;);
    }
 
    // Clean up
    free(public_key);
    free(signature);
    free(data);
    FreeLibrary(hLib);
    return 0;
}

</code></pre>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">C code for oppenssl 3.5.2 x64 signature RSA signature verification, practice material for replacing the public key with a single byte.</span><span style="text-decoration: underline;" class="mycode_u"></span> <br />
<br />
Writing code is hard work, so please give it a like.<br />
This can be used by beginners to practice replacing public keys with one byte.<br />
MinGW x64 compilation command:<br />
<code class="inline-code">gcc verify_license.c -o verify_license.exe -ladvapi32</code>.<br />
Signature verification command: <code class="inline-code">verify_license.exe public_key.pem license_sig.bin data.txt</code>.<br />
<br />
<pre class="block-code line-numbers"><code class="language-none">
#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;stdint.h&gt;
 
// Define OpenSSL initialization flags
#define OPENSSL_INIT_LOAD_CONFIG         0x00000004L
#define OPENSSL_INIT_ADD_ALL_CIPHERS     0x00000004L
#define OPENSSL_INIT_ADD_ALL_DIGESTS     0x00000008L
#define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L
 
// Declare OpenSSL opaque struct type
typedef struct evp_md_ctx_st EVP_MD_CTX;
typedef struct bio_st BIO;
typedef struct evp_pkey_st EVP_PKEY;
typedef struct evp_pkey_ctx_st EVP_PKEY_CTX;
typedef struct engine_st ENGINE;
typedef struct evp_md_st EVP_MD;
typedef struct ossl_provider_st OSSL_PROVIDER;
 
// Define password callback type
typedef int (*pem_password_cb)(char* buf, int size, int rwflag, void* u);
 
// Define the minimal function pointer type
typedef EVP_MD_CTX* (*fp_EVP_MD_CTX_new)(void);
typedef void (*fp_EVP_MD_CTX_free)(EVP_MD_CTX* ctx);
typedef int (*fp_EVP_DigestVerifyInit)(EVP_MD_CTX* ctx, EVP_PKEY_CTX** pctx, const EVP_MD* type, ENGINE* e, EVP_PKEY* pkey);
typedef int (*fp_EVP_DigestVerifyUpdate)(EVP_MD_CTX* ctx, const void* d, size_t cnt);
typedef int (*fp_EVP_DigestVerifyFinal)(EVP_MD_CTX* ctx, const unsigned char* sig, size_t siglen);
typedef BIO* (*fp_BIO_new_mem_buf)(const void* buf, int len);
typedef int (*fp_BIO_free)(BIO* a);
typedef EVP_PKEY* (*fp_PEM_read_bio_PUBKEY)(BIO* bp, EVP_PKEY** x, pem_password_cb cb, void* u);
typedef void (*fp_EVP_PKEY_free)(EVP_PKEY* pkey);
typedef const EVP_MD* (*fp_EVP_sha256)(void);
typedef int (*fp_OPENSSL_init_crypto)(uint64_t opts, const void* settings);
typedef OSSL_PROVIDER* (*fp_OSSL_PROVIDER_load)(void* ctx, const char* name);
typedef int (*fp_OSSL_PROVIDER_unload)(OSSL_PROVIDER* prov);
 
// Global function pointer
static fp_EVP_MD_CTX_new EVP_MD_CTX_new = NULL;
static fp_EVP_MD_CTX_free EVP_MD_CTX_free = NULL;
static fp_EVP_DigestVerifyInit EVP_DigestVerifyInit = NULL;
static fp_EVP_DigestVerifyUpdate EVP_DigestVerifyUpdate = NULL;
static fp_EVP_DigestVerifyFinal EVP_DigestVerifyFinal = NULL;
static fp_BIO_new_mem_buf BIO_new_mem_buf = NULL;
static fp_BIO_free BIO_free = NULL;
static fp_PEM_read_bio_PUBKEY PEM_read_bio_PUBKEY = NULL;
static fp_EVP_PKEY_free EVP_PKEY_free = NULL;
static fp_EVP_sha256 EVP_sha256 = NULL;
static fp_OPENSSL_init_crypto OPENSSL_init_crypto = NULL;
static fp_OSSL_PROVIDER_load OSSL_PROVIDER_load = NULL;
static fp_OSSL_PROVIDER_unload OSSL_PROVIDER_unload = NULL;
static OSSL_PROVIDER* default_provider = NULL;
 
// Load OpenSSL functions (minimized version)
int init_openssl_functions(HMODULE hLib) {
    #define LOAD_FUNC(type, name) \
        name = (type)GetProcAddress(hLib, #name); \
        if (!name) { \
            printf(&quot;Failed to load function: %s\n&quot;, #name); \
            return 0; \
        }
 
    // Core verification function
    LOAD_FUNC(fp_EVP_MD_CTX_new, EVP_MD_CTX_new);
    LOAD_FUNC(fp_EVP_MD_CTX_free, EVP_MD_CTX_free);
    LOAD_FUNC(fp_EVP_DigestVerifyInit, EVP_DigestVerifyInit);
    LOAD_FUNC(fp_EVP_DigestVerifyUpdate, EVP_DigestVerifyUpdate);
    LOAD_FUNC(fp_EVP_DigestVerifyFinal, EVP_DigestVerifyFinal);
     
    // BIO functions
    LOAD_FUNC(fp_BIO_new_mem_buf, BIO_new_mem_buf);
    LOAD_FUNC(fp_BIO_free, BIO_free);
     
    // Key function
    LOAD_FUNC(fp_PEM_read_bio_PUBKEY, PEM_read_bio_PUBKEY);
    LOAD_FUNC(fp_EVP_PKEY_free, EVP_PKEY_free);
     
    // Hash function
    LOAD_FUNC(fp_EVP_sha256, EVP_sha256);
     
    // OpenSSL 3.0+ Initialization
    LOAD_FUNC(fp_OPENSSL_init_crypto, OPENSSL_init_crypto);
    LOAD_FUNC(fp_OSSL_PROVIDER_load, OSSL_PROVIDER_load);
    LOAD_FUNC(fp_OSSL_PROVIDER_unload, OSSL_PROVIDER_unload);
 
    // Initialize OpenSSL 3.0
    uint64_t init_flags = OPENSSL_INIT_LOAD_CONFIG | 
                         OPENSSL_INIT_ADD_ALL_CIPHERS |
                         OPENSSL_INIT_ADD_ALL_DIGESTS |
                         OPENSSL_INIT_LOAD_CRYPTO_STRINGS;
     
    if (OPENSSL_init_crypto(init_flags, NULL) == 0) {
        printf(&quot;OPENSSL_init_crypto failed\n&quot;);
        return 0;
    }
     
    // Load the default provider
    default_provider = OSSL_PROVIDER_load(NULL, &quot;default&quot;);
    if (!default_provider) {
        printf(&quot;Failed to load default provider\n&quot;);
        return 0;
    }
 
    return 1;
    #undef LOAD_FUNC
}
 
// Read binary file
int read_binary_file(const char* filename, unsigned char** data, size_t* len) {
    FILE* file = fopen(filename, &quot;rb&quot;);
    if (!file) {
        perror(&quot;Error opening file&quot;);
        return 0;
    }
 
    fseek(file, 0, SEEK_END);
    *len = ftell(file);
    fseek(file, 0, SEEK_SET);
 
    *data = (unsigned char*)malloc(*len);
    if (!*data) {
        fclose(file);
        printf(&quot;Memory allocation failed\n&quot;);
        return 0;
    }
 
    if (fread(*data, 1, *len, file) != *len) {
        fclose(file);
        free(*data);
        printf(&quot;Error reading file\n&quot;);
        return 0;
    }
 
    fclose(file);
    return 1;
}
 
// Correct PEM format
char* fix_pem_format(const char* pem_data) {
    const char* header = &quot;-----BEGIN&quot;;
    const char* footer = &quot;-----END&quot;;
     
    const char* begin = strstr(pem_data, header);
    if (!begin) return NULL;
     
    const char* end = strstr(pem_data, footer);
    if (!end) return NULL;
     
    end += strlen(footer);
    while (*end &amp;&amp; *end != '\n' &amp;&amp; *end != '\r') end++;
     
    size_t length = end - begin;
    char* fixed = (char*)malloc(length + 2);
    if (!fixed) return NULL;
     
    const char* src = begin;
    char* dst = fixed;
     
    while (src &lt; end) {
        if (*src == '\r') { src++; continue; }
        *dst++ = *src++;
    }
     
    if (*(dst-1) != '\n') *dst++ = '\n';
    *dst = '\0';
     
    return fixed;
}
 
// Read public key file
char* read_public_key_pem(const char* filename) {
    FILE* file = fopen(filename, &quot;r&quot;);
    if (!file) {
        perror(&quot;Error opening public key file&quot;);
        return NULL;
    }
 
    fseek(file, 0, SEEK_END);
    long file_size = ftell(file);
    fseek(file, 0, SEEK_SET);
 
    char* pem_data = (char*)malloc(file_size + 1);
    if (!pem_data) {
        fclose(file);
        return NULL;
    }
 
    fread(pem_data, 1, file_size, file);
    pem_data[file_size] = '\0';
    fclose(file);
 
    char* fixed_pem = fix_pem_format(pem_data);
    free(pem_data);
    return fixed_pem;
}
 
// Verify signature (minimum version)
int verify_signature(const char* plaintext, size_t text_len,
                    const unsigned char* signature, size_t sig_len,
                    const char* public_key_pem) {
    EVP_MD_CTX* ctx = NULL;
    BIO* bio = NULL;
    EVP_PKEY* pkey = NULL;
    int return = 0;
 
    if (!(bio = BIO_new_mem_buf(public_key_pem, -1))) {
        printf(&quot;Error creating BIO\n&quot;);
        goto cleanup;
    }
 
    if (!(pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL))) {
        printf(&quot;Error loading public key\n&quot;);
        goto cleanup;
    }
 
    if (!(ctx = EVP_MD_CTX_new())) {
        printf(&quot;Error creating EVP_MD_CTX\n&quot;);
        goto cleanup;
    }
 
    if (EVP_DigestVerifyInit(ctx, NULL, EVP_sha256(), NULL, pkey) &lt;= 0) {
        printf(&quot;Error initializing verification\n&quot;);
        goto cleanup;
    }
 
    if (EVP_DigestVerifyUpdate(ctx, plaintext, text_len) &lt;= 0) {
        printf(&quot;Error updating verification data\n&quot;);
        goto cleanup;
    }
 
    ret = (EVP_DigestVerifyFinal(ctx, signature, sig_len) == 1);
 
cleanup:
    if (ctx) EVP_MD_CTX_free(ctx);
    if (pkey) EVP_PKEY_free(pkey);
    if (bio) BIO_free(bio);
    return ret;
}
 
void print_search_paths() {
    char path[4096];
    if (GetEnvironmentVariableA(&quot;PATH&quot;, path, sizeof(path))) {
        printf(&quot;Current PATH: %s\n&quot;, path);
    }
}
 
int main(int argc, char** argv) {
    if (argc != 4) {
        printf(&quot;Usage: %s &lt;public_key.pem&gt; &lt;signature.bin&gt; &lt;data.txt&gt;\n&quot;, argv[0]);
        return 1;
    }
 
    // Attempt to load OpenSSL
    const char* dll_names[] = {
        &quot;libcrypto-3-x64.dll&quot;, // Windows default name
        &quot;libcrypto-3.dll&quot;, // Possible names for some installations
        NULL
    };
 
    HMODULE hLib = NULL;
    for (int i = 0; dll_names[i]; i++) {
        hLib = LoadLibraryA(dll_names[i]);
        if (hLib) break;
    }
 
    if (!hLib) {
        printf(&quot;Failed to load OpenSSL library. Tried:\n&quot;);
        for (int i = 0; dll_names[i]; i++) printf(&quot; - %s\n&quot;, dll_names[i]);
        print_search_paths();
        return 1;
    }
 
    if (!init_openssl_functions(hLib)) {
        FreeLibrary(hLib);
        return 1;
    }
 
    // Read file
    char* public_key = read_public_key_pem(argv[1]);
    if (!public_key) {
        printf(&quot;Invalid public key file\n&quot;);
        FreeLibrary(hLib);
        return 1;
    }
 
    unsigned char* signature = NULL;
    size_t sig_len = 0;
    if (!read_binary_file(argv[2], &amp;signature, &amp;sig_len)) {
        printf(&quot;Invalid signature file\n&quot;);
        free(public_key);
        FreeLibrary(hLib);
        return 1;
    }
 
    unsigned char* data = NULL;
    size_t data_len = 0;
    if (!read_binary_file(argv[3], &amp;data, &amp;data_len)) {
        printf(&quot;Invalid data file\n&quot;);
        free(public_key);
        free(signature);
        FreeLibrary(hLib);
        return 1;
    }
 
    // Verify signature
    if (verify_signature((const char*)data, data_len, signature, sig_len, public_key)) {
        printf(&quot;Signature VALID\n&quot;);
    } else {
        printf(&quot;Signature INVALID\n&quot;);
    }
 
    // Clean up
    free(public_key);
    free(signature);
    free(data);
    FreeLibrary(hLib);
    return 0;
}

</code></pre>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[MSYS2 x86-x64]]></title>
			<link>https://www.at4re.net/f/thread-4894.html</link>
			<pubDate>Fri, 05 Dec 2025 16:18:10 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=4783">Str0x</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4894.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://i.imgur.com/2GwcjMz.png" loading="lazy"  alt="[صورة مرفقة: 2GwcjMz.png]" class="mycode_img" /><br />
<br />
Software Distribution and Building Platform for Windows<br />
 <br />
<pre class="block-code line-numbers"><code class="language-none">MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing and running native Windows software.

It consists of a command line terminal called mintty, bash, version control systems like git and subversion, tools like tar and awk and even build systems like autotools, all based on a modified version of Cygwin. Despite some of these central parts being based on Cygwin, the main focus of MSYS2 is to provide a build environment for native Windows software and the Cygwin-using parts are kept at a minimum. MSYS2 provides up-to-date native builds for GCC, mingw-w64, CPython, CMake, Meson, OpenSSL, FFmpeg, Rust, Ruby, just to name a few.

To provide easy installation of packages and a way to keep them updated it features a package management system called Pacman, which should be familiar to Arch Linux users. It brings many powerful features such as dependency resolution and simple complete system upgrades, as well as straight-forward and reproducible package building. Our package repository contains more than 3500 pre-built packages ready to install.

For more details see 'What is MSYS2?' which also compares MSYS2 to other software distributions and development environments like Cygwin, WSL, Chocolatey, Scoop, ... and 'Who Is Using MSYS2?' to see which projects are using MSYS2 and what for.
</code></pre> <br />
<pre class="block-code line-numbers"><code class="language-none">https://www.msys2.org
</code></pre></div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://i.imgur.com/2GwcjMz.png" loading="lazy"  alt="[صورة مرفقة: 2GwcjMz.png]" class="mycode_img" /><br />
<br />
Software Distribution and Building Platform for Windows<br />
 <br />
<pre class="block-code line-numbers"><code class="language-none">MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing and running native Windows software.

It consists of a command line terminal called mintty, bash, version control systems like git and subversion, tools like tar and awk and even build systems like autotools, all based on a modified version of Cygwin. Despite some of these central parts being based on Cygwin, the main focus of MSYS2 is to provide a build environment for native Windows software and the Cygwin-using parts are kept at a minimum. MSYS2 provides up-to-date native builds for GCC, mingw-w64, CPython, CMake, Meson, OpenSSL, FFmpeg, Rust, Ruby, just to name a few.

To provide easy installation of packages and a way to keep them updated it features a package management system called Pacman, which should be familiar to Arch Linux users. It brings many powerful features such as dependency resolution and simple complete system upgrades, as well as straight-forward and reproducible package building. Our package repository contains more than 3500 pre-built packages ready to install.

For more details see 'What is MSYS2?' which also compares MSYS2 to other software distributions and development environments like Cygwin, WSL, Chocolatey, Scoop, ... and 'Who Is Using MSYS2?' to see which projects are using MSYS2 and what for.
</code></pre> <br />
<pre class="block-code line-numbers"><code class="language-none">https://www.msys2.org
</code></pre></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Use FASM X64 assembly code to hook the message box and verify the source code]]></title>
			<link>https://www.at4re.net/f/thread-4659.html</link>
			<pubDate>Tue, 22 Jul 2025 05:54:03 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=4197">Lauda937</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4659.html</guid>
			<description><![CDATA[<pre class="block-code line-numbers"><code class="language-none">format PE64 GUI 5.0
entry start
 
include 'win64a.inc'
 
section '.data' data readable writeable
  origMessage   db 'Original message',0
  hookedMessage db 'HOOK SUCCESSFUL!',0
  caption       db 'MessageBox Hook',0
  user32        db 'user32.dll',0
  msgBoxA       db 'MessageBoxA',0
 
  ; Addresses and handles
  hUser32       dq ?
  pMessageBoxA  dq ?
  hProcess      dq ?
  trampoline    dq ?        ; Address of trampoline function
  oldProtect    dq ?        ; Old memory protection
  bytesWritten  dq ?        ; Bytes written by WriteProcessMemory
 
  ; Original bytes storage
  origBytes     db 14 dup(?)
  backupBytes   db 14 dup(?)
 
section '.text' code readable executable
 
start:
  sub rsp, 0x28            ; Allocate shadow space
 
  ; Load user32.dll and get MessageBoxA address
  invoke LoadLibraryA, user32
  test rax, rax
  jz .exit
  mov [hUser32], rax
 
  invoke GetProcAddress, rax, msgBoxA
  test rax, rax
  jz .exit
  mov [pMessageBoxA], rax
 
  ; Show original MessageBoxA
  invoke MessageBoxA, 0, origMessage, caption, MB_OK
 
  ; Save original bytes
  mov rsi, [pMessageBoxA]
  lea rdi, [origBytes]
  mov rcx, 14
  rep movsb
 
  ; Create trampoline function
  invoke VirtualAlloc, 0, 32, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
  test rax, rax
  jz .exit
  mov [trampoline], rax
 
  ; Copy original bytes to trampoline
  mov rdi, rax
  lea rsi, [origBytes]
  mov rcx, 14
  rep movsb
 
  ; Add jump back to original function+14
  mov rax, [trampoline]
  add rax, 14
  mov rdi, rax
  mov byte [rdi],   0x48    ; mov rax, [pMessageBoxA+14]
  mov byte [rdi+1], 0xB8
  mov rax, [pMessageBoxA]
  add rax, 14
  mov [rdi+2], rax
  mov byte [rdi+10], 0xFF   ; jmp rax
  mov byte [rdi+11], 0xE0
 
  ; Prepare hook jump (14 bytes)
  lea rdi, [backupBytes]    ; Where we'll build our jump
  mov byte [rdi],   0x48    ; mov rax, hook_handler
  mov byte [rdi+1], 0xB8
  lea rax, [hook_handler]
  mov [rdi+2], rax
  mov byte [rdi+10], 0xFF   ; jmp rax
  mov byte [rdi+11], 0xE0
 
  ; Make MessageBoxA memory writable
  invoke GetCurrentProcess
  mov [hProcess], rax
  invoke VirtualProtect, [pMessageBoxA], 14, PAGE_EXECUTE_READWRITE, oldProtect
  test rax, rax
  jz .exit
 
  ; Write the hook using WriteProcessMemory
  invoke WriteProcessMemory, [hProcess], [pMessageBoxA], backupBytes, 14, bytesWritten
  test rax, rax
  jz .restore_and_exit
 
  ; Show hooked MessageBoxA
  invoke MessageBoxA, 0, origMessage, caption, MB_OK
 
.exit:
  invoke ExitProcess, 0
 
.restore_and_exit:
  ; Restore original bytes if hook failed
  invoke WriteProcessMemory, [hProcess], [pMessageBoxA], origBytes, 14, bytesWritten
  jmp .exit
 
hook_handler:
  ; Replace message with our hooked version
  lea rdx, [hookedMessage]  ; New text
  jmp [trampoline]          ; Jump to trampoline
 
section '.idata' import data readable
  library kernel32, 'kernel32.dll', \
          user32, 'user32.dll'
 
  import kernel32, \
         ExitProcess, 'ExitProcess', \
         LoadLibraryA, 'LoadLibraryA', \
         GetProcAddress, 'GetProcAddress', \
         VirtualAlloc, 'VirtualAlloc', \
         VirtualProtect, 'VirtualProtect', \
         WriteProcessMemory, 'WriteProcessMemory', \
         GetCurrentProcess, 'GetCurrentProcess'
 
  import user32, \
MessageBoxA, 'MessageBoxA'
        </code></pre>]]></description>
			<content:encoded><![CDATA[<pre class="block-code line-numbers"><code class="language-none">format PE64 GUI 5.0
entry start
 
include 'win64a.inc'
 
section '.data' data readable writeable
  origMessage   db 'Original message',0
  hookedMessage db 'HOOK SUCCESSFUL!',0
  caption       db 'MessageBox Hook',0
  user32        db 'user32.dll',0
  msgBoxA       db 'MessageBoxA',0
 
  ; Addresses and handles
  hUser32       dq ?
  pMessageBoxA  dq ?
  hProcess      dq ?
  trampoline    dq ?        ; Address of trampoline function
  oldProtect    dq ?        ; Old memory protection
  bytesWritten  dq ?        ; Bytes written by WriteProcessMemory
 
  ; Original bytes storage
  origBytes     db 14 dup(?)
  backupBytes   db 14 dup(?)
 
section '.text' code readable executable
 
start:
  sub rsp, 0x28            ; Allocate shadow space
 
  ; Load user32.dll and get MessageBoxA address
  invoke LoadLibraryA, user32
  test rax, rax
  jz .exit
  mov [hUser32], rax
 
  invoke GetProcAddress, rax, msgBoxA
  test rax, rax
  jz .exit
  mov [pMessageBoxA], rax
 
  ; Show original MessageBoxA
  invoke MessageBoxA, 0, origMessage, caption, MB_OK
 
  ; Save original bytes
  mov rsi, [pMessageBoxA]
  lea rdi, [origBytes]
  mov rcx, 14
  rep movsb
 
  ; Create trampoline function
  invoke VirtualAlloc, 0, 32, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
  test rax, rax
  jz .exit
  mov [trampoline], rax
 
  ; Copy original bytes to trampoline
  mov rdi, rax
  lea rsi, [origBytes]
  mov rcx, 14
  rep movsb
 
  ; Add jump back to original function+14
  mov rax, [trampoline]
  add rax, 14
  mov rdi, rax
  mov byte [rdi],   0x48    ; mov rax, [pMessageBoxA+14]
  mov byte [rdi+1], 0xB8
  mov rax, [pMessageBoxA]
  add rax, 14
  mov [rdi+2], rax
  mov byte [rdi+10], 0xFF   ; jmp rax
  mov byte [rdi+11], 0xE0
 
  ; Prepare hook jump (14 bytes)
  lea rdi, [backupBytes]    ; Where we'll build our jump
  mov byte [rdi],   0x48    ; mov rax, hook_handler
  mov byte [rdi+1], 0xB8
  lea rax, [hook_handler]
  mov [rdi+2], rax
  mov byte [rdi+10], 0xFF   ; jmp rax
  mov byte [rdi+11], 0xE0
 
  ; Make MessageBoxA memory writable
  invoke GetCurrentProcess
  mov [hProcess], rax
  invoke VirtualProtect, [pMessageBoxA], 14, PAGE_EXECUTE_READWRITE, oldProtect
  test rax, rax
  jz .exit
 
  ; Write the hook using WriteProcessMemory
  invoke WriteProcessMemory, [hProcess], [pMessageBoxA], backupBytes, 14, bytesWritten
  test rax, rax
  jz .restore_and_exit
 
  ; Show hooked MessageBoxA
  invoke MessageBoxA, 0, origMessage, caption, MB_OK
 
.exit:
  invoke ExitProcess, 0
 
.restore_and_exit:
  ; Restore original bytes if hook failed
  invoke WriteProcessMemory, [hProcess], [pMessageBoxA], origBytes, 14, bytesWritten
  jmp .exit
 
hook_handler:
  ; Replace message with our hooked version
  lea rdx, [hookedMessage]  ; New text
  jmp [trampoline]          ; Jump to trampoline
 
section '.idata' import data readable
  library kernel32, 'kernel32.dll', \
          user32, 'user32.dll'
 
  import kernel32, \
         ExitProcess, 'ExitProcess', \
         LoadLibraryA, 'LoadLibraryA', \
         GetProcAddress, 'GetProcAddress', \
         VirtualAlloc, 'VirtualAlloc', \
         VirtualProtect, 'VirtualProtect', \
         WriteProcessMemory, 'WriteProcessMemory', \
         GetCurrentProcess, 'GetCurrentProcess'
 
  import user32, \
MessageBoxA, 'MessageBoxA'
        </code></pre>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Open Scanner 0.1 RC2 + Source by Mouradpr - AT4RE]]></title>
			<link>https://www.at4re.net/f/thread-4645.html</link>
			<pubDate>Sat, 12 Jul 2025 00:34:10 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=4781">Service Manual</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4645.html</guid>
			<description><![CDATA[<div style="text-align: left;" class="mycode_align">Open Scanner version 1 Open Source Code<br />
Author : Mouradpr<br />
Team   : Arab Team For Reverse Engineering [AT4RE]<br />
Release Date : 01/09/2009</div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/rar.png" title="RAR File" border="0" alt=".rar" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=3243" target="_blank" title="">Open Scanner 0.1 RC2 + Source by AT4RE.rar</a> (الحجم : 593.98 KB / التحميلات : 0)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<div style="text-align: left;" class="mycode_align">Open Scanner version 1 Open Source Code<br />
Author : Mouradpr<br />
Team   : Arab Team For Reverse Engineering [AT4RE]<br />
Release Date : 01/09/2009</div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/rar.png" title="RAR File" border="0" alt=".rar" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=3243" target="_blank" title="">Open Scanner 0.1 RC2 + Source by AT4RE.rar</a> (الحجم : 593.98 KB / التحميلات : 0)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Microsoft Visual C++ Redistributable 2oo5-2o22]]></title>
			<link>https://www.at4re.net/f/thread-4519.html</link>
			<pubDate>Sat, 22 Mar 2025 19:31:41 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=4783">Str0x</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4519.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align">
<pre class="block-code"><code class="language-none">The Microsoft Visual C++ Redistributable is a package that installs runtime components required to run applications developed using Microsoft Visual C++. Many Windows programs, especially those written in C and C++, depend on these libraries to function properly.
</code></pre> <br />
<pre class="block-code"><code class="language-none">https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170
</code></pre></div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align">
<pre class="block-code"><code class="language-none">The Microsoft Visual C++ Redistributable is a package that installs runtime components required to run applications developed using Microsoft Visual C++. Many Windows programs, especially those written in C and C++, depend on these libraries to function properly.
</code></pre> <br />
<pre class="block-code"><code class="language-none">https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170
</code></pre></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Qt for Visual Studio]]></title>
			<link>https://www.at4re.net/f/thread-4511.html</link>
			<pubDate>Thu, 20 Mar 2025 13:40:03 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=4783">Str0x</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4511.html</guid>
			<description><![CDATA[<pre class="block-code"><code class="language-none">Qt is a popular cross-platform application development framework used for creating high-performance applications with rich graphical user interfaces (GUIs). It supports C++ and integrates well with Visual Studio (VS), allowing developers to work efficiently within Microsoft's powerful IDE.
</code></pre><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/txt.png" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=3123" target="_blank" title="">Link.txt</a> (الحجم : 44 bytes / التحميلات : 2)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[<pre class="block-code"><code class="language-none">Qt is a popular cross-platform application development framework used for creating high-performance applications with rich graphical user interfaces (GUIs). It supports C++ and integrates well with Visual Studio (VS), allowing developers to work efficiently within Microsoft's powerful IDE.
</code></pre><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/txt.png" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=3123" target="_blank" title="">Link.txt</a> (الحجم : 44 bytes / التحميلات : 2)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Visual Studio 2005 - 2015 iso Files (English)]]></title>
			<link>https://www.at4re.net/f/thread-4444.html</link>
			<pubDate>Tue, 25 Feb 2025 08:46:13 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=4783">Str0x</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4444.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align">Visual Studio 2005 - 2015 iso Files (English)<br />
 <br />
<pre class="block-code"><code class="language-none">Visual Studio is an integrated development environment (IDE) developed by Microsoft. It is widely used for building applications across various platforms, including Windows, web, mobile, and cloud. It supports multiple programming languages such as C#, C++, Python, JavaScript, and more. Visual Studio offers features like code editing, debugging, version control, and AI-powered code suggestions, making software development more efficient. It comes in different editions, including Community (free), Professional, and Enterprise, catering to different user needs.
</code></pre><br />
<pre class="block-code"><code class="language-none">https://archive.org/download/dev-microsoft-visual-studio-2005-2015-Pro
</code></pre></div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align">Visual Studio 2005 - 2015 iso Files (English)<br />
 <br />
<pre class="block-code"><code class="language-none">Visual Studio is an integrated development environment (IDE) developed by Microsoft. It is widely used for building applications across various platforms, including Windows, web, mobile, and cloud. It supports multiple programming languages such as C#, C++, Python, JavaScript, and more. Visual Studio offers features like code editing, debugging, version control, and AI-powered code suggestions, making software development more efficient. It comes in different editions, including Community (free), Professional, and Enterprise, catering to different user needs.
</code></pre><br />
<pre class="block-code"><code class="language-none">https://archive.org/download/dev-microsoft-visual-studio-2005-2015-Pro
</code></pre></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CHIP8 PROCESSOR EMULATOR SOURCE CODE [C/C++]]]></title>
			<link>https://www.at4re.net/f/thread-4152.html</link>
			<pubDate>Fri, 01 Nov 2024 00:06:52 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=112">H@rd.net</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4152.html</guid>
			<description><![CDATA[السلام عليكم ورحمة الله وبركاته <br />
<br />
كود مصدري لمحاكات العتاد و خصوصا المعالج  <a href="https://en.wikipedia.org/wiki/RCA_1802" target="_blank" rel="noopener" class="mycode_url">1802</a> microprocessor.  أبسط معالج في تاريخ المعلوميات على حد علمي ....<br />
في المرفقات + ثلاثة دامبات لألعاب كلاسكية tetris+alien invaders+pong إمتداد .c8 <br />
<br />
<img src="https://www.at4re.net/f/images/smilies/rose.gif" alt="rose" title="rose" class="smilie smilie_35" /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2822" target="_blank" title="">myChip8-bin-src.zip</a> (الحجم : 88.49 KB / التحميلات : 12)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[السلام عليكم ورحمة الله وبركاته <br />
<br />
كود مصدري لمحاكات العتاد و خصوصا المعالج  <a href="https://en.wikipedia.org/wiki/RCA_1802" target="_blank" rel="noopener" class="mycode_url">1802</a> microprocessor.  أبسط معالج في تاريخ المعلوميات على حد علمي ....<br />
في المرفقات + ثلاثة دامبات لألعاب كلاسكية tetris+alien invaders+pong إمتداد .c8 <br />
<br />
<img src="https://www.at4re.net/f/images/smilies/rose.gif" alt="rose" title="rose" class="smilie smilie_35" /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.at4re.net/f/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=2822" target="_blank" title="">myChip8-bin-src.zip</a> (الحجم : 88.49 KB / التحميلات : 12)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[التدريب الفصل 2  Objects, Types, and Values]]></title>
			<link>https://www.at4re.net/f/thread-4029.html</link>
			<pubDate>Sun, 19 May 2024 11:59:16 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=0">R333T</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4029.html</guid>
			<description><![CDATA[<img src="https://i.ibb.co/MS9rsJx/dark.jpg" loading="lazy"  alt="[صورة مرفقة: dark.jpg]" class="mycode_img" /><br />
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/playlist?list=PL...qaKxmAKHrq</a><br />
<br />
<br />
# الفصل 0 : تمهيد<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3845.html" target="_blank" rel="noopener" class="mycode_url">0.1 تعلم البرمجة من خلال التطبيق: بناء أكواد جميلة وفعالة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3846.html" target="_blank" rel="noopener" class="mycode_url">0.2 صقل مهاراتك في البرمجة: التمارين والاختبارات والمشاريع المشتركة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3847.html" target="_blank" rel="noopener" class="mycode_url">0.3 بعد هذه السلسلة: رحلتك نحو إتقان البرمجة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3848.html" target="_blank" rel="noopener" class="mycode_url">0.4 رحلتك في البرمجة: نصائح وتشجيع </a><br />
</li>
</ul>
# الفصل 1 : مرحبا بالعالم !<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3849.html" target="_blank" rel="noopener" class="mycode_url">1.0 مقدمة الفصل 1 : مرحبا بالعالم !</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3850.html" target="_blank" rel="noopener" class="mycode_url">1.1 البرامج - Programs</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3851.html" target="_blank" rel="noopener" class="mycode_url">1.2 تشغيل و Compile برنامج C++ الأول الخاص بك على نظام التشغيل Windows</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3852-post-19504.html#pid19504" target="_blank" rel="noopener" class="mycode_url"> G00d Premium F0nt 4 c0ding M0n0L1sa</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3854-post-19506.html#pid19506" target="_blank" rel="noopener" class="mycode_url"> How to instalԼ EmꞴarcadero ЯAD StuĐio 12.1 AtԨens ArꞆhitect V€rsion 29.0.51961.7529 U</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3855-post-19507.html#pid19507" target="_blank" rel="noopener" class="mycode_url"> TutoЯial Ԩow instalԼ and activaԷe CLioЍ</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3859.html" target="_blank" rel="noopener" class="mycode_url">1.3 ما هو ال preprocess ؟ وما هو ال assemble ؟ وما هو ال compile ؟ وما هو ال linking؟</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3865.html" target="_blank" rel="noopener" class="mycode_url">1.4 البرنامج C++ الأول الكلاسيكي - تفسير دقيق بناء ركيزه البرمجه</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3868.html" target="_blank" rel="noopener" class="mycode_url">1.5 التجميع - Compilation - فهم التعامل مع Compiler</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3872.html" target="_blank" rel="noopener" class="mycode_url">1.6 استكشاف الlinking من الداخل بشكل عميق مع  النوعين static  و dynamic</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3880.html" target="_blank" rel="noopener" class="mycode_url">1.7 مراجعة وتمارين الفصل الأول</a><br />
</li>
</ul>
# الفصل 2 :  Objects, Types, and Values<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3890.html" target="_blank" rel="noopener" class="mycode_url">2.1 الإدخال- input</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3894.html" target="_blank" rel="noopener" class="mycode_url"> 2.2 المتغيرات - variables</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3896.html" target="_blank" rel="noopener" class="mycode_url">2.3 المدخلات والنوع - Input and type</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3899.html" target="_blank" rel="noopener" class="mycode_url">2.4 العمليات Operations والمشغلات operators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3905.html" target="_blank" rel="noopener" class="mycode_url">2.5 الAssignment والInitialization</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3906-post-19645.html" target="_blank" rel="noopener" class="mycode_url">2.6 تمرين عملي - اكتشاف الكلمات المتكررة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3907.html" target="_blank" rel="noopener" class="mycode_url">2.7 العمليات المركبة للoperators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3925.html" target="_blank" rel="noopener" class="mycode_url">إنشاء برامج x86 أو x64 باستخدام MinGW وCLion</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4024.html" target="_blank" rel="noopener" class="mycode_url">2.8 أسماء في C++ - Names</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4025.html" target="_blank" rel="noopener" class="mycode_url">2.9 أنواع وكائنات - Types and objects</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4026.html" target="_blank" rel="noopener" class="mycode_url">2.10 سلامة النوع - Type safety</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4027.html" target="_blank" rel="noopener" class="mycode_url">2.11 التحويلات Conversions</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4028.html" target="_blank" rel="noopener" class="mycode_url">2.12 التقدير التلقائي auto</a><br />
</li>
<li>التدريب الفصل 2  Objects, Types, and Values<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/V85ecE5wZ6g" frameborder="0" allowfullscreen="true"></iframe></div>
<br />
التدريب<br />
بعد كل خطوة من هذا التدريب، قم بتشغيل برنامجك للتأكد من أنه يقوم فعلًا بما تتوقعه.<br />
احتفظ بقائمة بالأخطاء التي ترتكبها حتى تتمكن من محاولة تجنبها في المستقبل.<br />
[1] اكتب برنامجًا ينتج رسالة نموذجية بسيطة استنادًا إلى إدخال المستخدم. <br />
ابدأ بكتابة الشيفرة التي تطلب من المستخدم إدخال اسمه الأول وتكتب "مرحبا، اسم_المستخدم" حيث اسم_المستخدم هو الاسم الذي أدخله المستخدم. <br />
ثم قم بتعديل شيفرتك كالتالي: قم بتغيير الرسالة المطلوبة إلى "أدخل اسم الشخص الذي تريد أن تكتب له" و<br />
قم بتغيير الإخراج إلى "عزيزي اسم_المستخدم،". لا تنس الفاصلة.<br />
[2] أضف سطرًا أو اثنين مقدمة، مثل "كيف حالك؟ أنا بخير. أشتاق إليك." <br />
تأكد من بدء السطر الأول بالانحراف. <br />
أضف بعض السطور الإضافية على اختيارك - إنها رسالتك.<br />
[3] الآن اطلب من المستخدم اسم صديق آخر وقم بتخزينه في friend_name. <br />
أضف سطرًا إلى رسالتك: "هل رأيت friend_name مؤخرًا؟"<br />
[4] اطلب من المستخدم إدخال عمر المتلقي وقم بتعيينه لمتغير int يدعى age. <br />
ليكتب برنامجك: "أسمع أنك للتو احتفلت بعيد ميلادك وأنك عمرك سنة." <br />
إذا كان العمر 0 أو أقل أو 110 أو أكثر، اتصل بالدالة "خطأ("أنت تمزح!")"<br />
[5] أضف هذا إلى رسالتك:<br />
إذا كان صديقك دون سن الثانية عشر، اكتب "العام القادم ستكون عمرك + 1." إذا كان صديقك عمره<br />
17 سنة، اكتب "العام القادم ستتمكن من التصويت." إذا كان صديقك فوق السبعين، اكتب "هل أنت متقاعد؟"<br />
تحقق من برنامجك للتأكد من أنه يستجيب بشكل مناسب لكل نوع من القيم.<br />
[6] أضف "بكل تحية،" تليها سطران فارغان للتوقيع، تليهما اسمك.<br />
<br />
<br />
Drill<br />
After each step of this drill, run your program to make sure it is really doing what you expect it to.<br />
Keep a list of what mistakes you make so that you can try to avoid those in the future.<br />
[1] Write a program that produces a simple form letter based on user input. <br />
Begin by typing the code prompting a user to enter his or her first name and writing ‘‘Hello,<br />
first_name’’ where first_name is the name entered by the user. <br />
Then modify your code as follows: change the prompt to ‘‘Enter the name of the person you want to write to’’ and<br />
change the output to ‘‘Dear first_name ,’’. Don’t forget the comma.<br />
[2] Add an introductory line or two, like ‘‘How are you? I am fine. I miss you.’’ <br />
Be sure to indent the first line. <br />
Add a few more lines of your choosing – it’s your letter.<br />
[3] Now prompt the user for the name of another friend and store it in friend_name. <br />
Add a line to your letter: ‘‘Have you seen friend_name lately?’’<br />
[4] Prompt the user to enter the age of the recipient and assign it to an int variable age. <br />
Have your program write ‘‘I hear you just had a birthday and you are age years old.’’ <br />
If age is 0 or less or 110 or more, call error("you’re kidding!") <br />
[5] Add this to your letter:<br />
If your friend is under 12, write ‘‘Next year you will be age+1.’’ If your friend is<br />
17, write ‘‘Next year you will be able to vote.’’ If your friend is over 70, write ‘‘Are you retired?’’<br />
Check your program to make sure it responds appropriately to each kind of value.<br />
[6] Add ‘‘Yours sincerely,’’ followed by two blank lines for a signature, followed by your name.<br />
<br />
<br />
 <img src="https://www.at4re.net/f/images/smilies/nice.gif" alt="nice" title="nice" class="smilie smilie_33" />]]></description>
			<content:encoded><![CDATA[<img src="https://i.ibb.co/MS9rsJx/dark.jpg" loading="lazy"  alt="[صورة مرفقة: dark.jpg]" class="mycode_img" /><br />
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/playlist?list=PL...qaKxmAKHrq</a><br />
<br />
<br />
# الفصل 0 : تمهيد<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3845.html" target="_blank" rel="noopener" class="mycode_url">0.1 تعلم البرمجة من خلال التطبيق: بناء أكواد جميلة وفعالة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3846.html" target="_blank" rel="noopener" class="mycode_url">0.2 صقل مهاراتك في البرمجة: التمارين والاختبارات والمشاريع المشتركة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3847.html" target="_blank" rel="noopener" class="mycode_url">0.3 بعد هذه السلسلة: رحلتك نحو إتقان البرمجة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3848.html" target="_blank" rel="noopener" class="mycode_url">0.4 رحلتك في البرمجة: نصائح وتشجيع </a><br />
</li>
</ul>
# الفصل 1 : مرحبا بالعالم !<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3849.html" target="_blank" rel="noopener" class="mycode_url">1.0 مقدمة الفصل 1 : مرحبا بالعالم !</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3850.html" target="_blank" rel="noopener" class="mycode_url">1.1 البرامج - Programs</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3851.html" target="_blank" rel="noopener" class="mycode_url">1.2 تشغيل و Compile برنامج C++ الأول الخاص بك على نظام التشغيل Windows</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3852-post-19504.html#pid19504" target="_blank" rel="noopener" class="mycode_url"> G00d Premium F0nt 4 c0ding M0n0L1sa</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3854-post-19506.html#pid19506" target="_blank" rel="noopener" class="mycode_url"> How to instalԼ EmꞴarcadero ЯAD StuĐio 12.1 AtԨens ArꞆhitect V€rsion 29.0.51961.7529 U</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3855-post-19507.html#pid19507" target="_blank" rel="noopener" class="mycode_url"> TutoЯial Ԩow instalԼ and activaԷe CLioЍ</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3859.html" target="_blank" rel="noopener" class="mycode_url">1.3 ما هو ال preprocess ؟ وما هو ال assemble ؟ وما هو ال compile ؟ وما هو ال linking؟</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3865.html" target="_blank" rel="noopener" class="mycode_url">1.4 البرنامج C++ الأول الكلاسيكي - تفسير دقيق بناء ركيزه البرمجه</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3868.html" target="_blank" rel="noopener" class="mycode_url">1.5 التجميع - Compilation - فهم التعامل مع Compiler</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3872.html" target="_blank" rel="noopener" class="mycode_url">1.6 استكشاف الlinking من الداخل بشكل عميق مع  النوعين static  و dynamic</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3880.html" target="_blank" rel="noopener" class="mycode_url">1.7 مراجعة وتمارين الفصل الأول</a><br />
</li>
</ul>
# الفصل 2 :  Objects, Types, and Values<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3890.html" target="_blank" rel="noopener" class="mycode_url">2.1 الإدخال- input</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3894.html" target="_blank" rel="noopener" class="mycode_url"> 2.2 المتغيرات - variables</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3896.html" target="_blank" rel="noopener" class="mycode_url">2.3 المدخلات والنوع - Input and type</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3899.html" target="_blank" rel="noopener" class="mycode_url">2.4 العمليات Operations والمشغلات operators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3905.html" target="_blank" rel="noopener" class="mycode_url">2.5 الAssignment والInitialization</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3906-post-19645.html" target="_blank" rel="noopener" class="mycode_url">2.6 تمرين عملي - اكتشاف الكلمات المتكررة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3907.html" target="_blank" rel="noopener" class="mycode_url">2.7 العمليات المركبة للoperators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3925.html" target="_blank" rel="noopener" class="mycode_url">إنشاء برامج x86 أو x64 باستخدام MinGW وCLion</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4024.html" target="_blank" rel="noopener" class="mycode_url">2.8 أسماء في C++ - Names</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4025.html" target="_blank" rel="noopener" class="mycode_url">2.9 أنواع وكائنات - Types and objects</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4026.html" target="_blank" rel="noopener" class="mycode_url">2.10 سلامة النوع - Type safety</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4027.html" target="_blank" rel="noopener" class="mycode_url">2.11 التحويلات Conversions</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4028.html" target="_blank" rel="noopener" class="mycode_url">2.12 التقدير التلقائي auto</a><br />
</li>
<li>التدريب الفصل 2  Objects, Types, and Values<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/V85ecE5wZ6g" frameborder="0" allowfullscreen="true"></iframe></div>
<br />
التدريب<br />
بعد كل خطوة من هذا التدريب، قم بتشغيل برنامجك للتأكد من أنه يقوم فعلًا بما تتوقعه.<br />
احتفظ بقائمة بالأخطاء التي ترتكبها حتى تتمكن من محاولة تجنبها في المستقبل.<br />
[1] اكتب برنامجًا ينتج رسالة نموذجية بسيطة استنادًا إلى إدخال المستخدم. <br />
ابدأ بكتابة الشيفرة التي تطلب من المستخدم إدخال اسمه الأول وتكتب "مرحبا، اسم_المستخدم" حيث اسم_المستخدم هو الاسم الذي أدخله المستخدم. <br />
ثم قم بتعديل شيفرتك كالتالي: قم بتغيير الرسالة المطلوبة إلى "أدخل اسم الشخص الذي تريد أن تكتب له" و<br />
قم بتغيير الإخراج إلى "عزيزي اسم_المستخدم،". لا تنس الفاصلة.<br />
[2] أضف سطرًا أو اثنين مقدمة، مثل "كيف حالك؟ أنا بخير. أشتاق إليك." <br />
تأكد من بدء السطر الأول بالانحراف. <br />
أضف بعض السطور الإضافية على اختيارك - إنها رسالتك.<br />
[3] الآن اطلب من المستخدم اسم صديق آخر وقم بتخزينه في friend_name. <br />
أضف سطرًا إلى رسالتك: "هل رأيت friend_name مؤخرًا؟"<br />
[4] اطلب من المستخدم إدخال عمر المتلقي وقم بتعيينه لمتغير int يدعى age. <br />
ليكتب برنامجك: "أسمع أنك للتو احتفلت بعيد ميلادك وأنك عمرك سنة." <br />
إذا كان العمر 0 أو أقل أو 110 أو أكثر، اتصل بالدالة "خطأ("أنت تمزح!")"<br />
[5] أضف هذا إلى رسالتك:<br />
إذا كان صديقك دون سن الثانية عشر، اكتب "العام القادم ستكون عمرك + 1." إذا كان صديقك عمره<br />
17 سنة، اكتب "العام القادم ستتمكن من التصويت." إذا كان صديقك فوق السبعين، اكتب "هل أنت متقاعد؟"<br />
تحقق من برنامجك للتأكد من أنه يستجيب بشكل مناسب لكل نوع من القيم.<br />
[6] أضف "بكل تحية،" تليها سطران فارغان للتوقيع، تليهما اسمك.<br />
<br />
<br />
Drill<br />
After each step of this drill, run your program to make sure it is really doing what you expect it to.<br />
Keep a list of what mistakes you make so that you can try to avoid those in the future.<br />
[1] Write a program that produces a simple form letter based on user input. <br />
Begin by typing the code prompting a user to enter his or her first name and writing ‘‘Hello,<br />
first_name’’ where first_name is the name entered by the user. <br />
Then modify your code as follows: change the prompt to ‘‘Enter the name of the person you want to write to’’ and<br />
change the output to ‘‘Dear first_name ,’’. Don’t forget the comma.<br />
[2] Add an introductory line or two, like ‘‘How are you? I am fine. I miss you.’’ <br />
Be sure to indent the first line. <br />
Add a few more lines of your choosing – it’s your letter.<br />
[3] Now prompt the user for the name of another friend and store it in friend_name. <br />
Add a line to your letter: ‘‘Have you seen friend_name lately?’’<br />
[4] Prompt the user to enter the age of the recipient and assign it to an int variable age. <br />
Have your program write ‘‘I hear you just had a birthday and you are age years old.’’ <br />
If age is 0 or less or 110 or more, call error("you’re kidding!") <br />
[5] Add this to your letter:<br />
If your friend is under 12, write ‘‘Next year you will be age+1.’’ If your friend is<br />
17, write ‘‘Next year you will be able to vote.’’ If your friend is over 70, write ‘‘Are you retired?’’<br />
Check your program to make sure it responds appropriately to each kind of value.<br />
[6] Add ‘‘Yours sincerely,’’ followed by two blank lines for a signature, followed by your name.<br />
<br />
<br />
 <img src="https://www.at4re.net/f/images/smilies/nice.gif" alt="nice" title="nice" class="smilie smilie_33" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[2.11 التحويلات Conversions]]></title>
			<link>https://www.at4re.net/f/thread-4027.html</link>
			<pubDate>Sun, 19 May 2024 10:15:49 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=0">R333T</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4027.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://i.ibb.co/MS9rsJx/dark.jpg" loading="lazy"  alt="[صورة مرفقة: dark.jpg]" class="mycode_img" /></div>
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/playlist?list=PL...qaKxmAKHrq</a><br />
<br />
<br />
# الفصل 0 : تمهيد<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3845.html" target="_blank" rel="noopener" class="mycode_url">0.1 تعلم البرمجة من خلال التطبيق: بناء أكواد جميلة وفعالة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3846.html" target="_blank" rel="noopener" class="mycode_url">0.2 صقل مهاراتك في البرمجة: التمارين والاختبارات والمشاريع المشتركة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3847.html" target="_blank" rel="noopener" class="mycode_url">0.3 بعد هذه السلسلة: رحلتك نحو إتقان البرمجة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3848.html" target="_blank" rel="noopener" class="mycode_url">0.4 رحلتك في البرمجة: نصائح وتشجيع </a><br />
</li>
</ul>
# الفصل 1 :<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3849.html" target="_blank" rel="noopener" class="mycode_url">1.0 مقدمة الفصل 1 : مرحبا بالعالم !</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3850.html" target="_blank" rel="noopener" class="mycode_url">1.1 البرامج - Programs</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3851.html" target="_blank" rel="noopener" class="mycode_url">1.2 تشغيل و Compile برنامج C++ الأول الخاص بك على نظام التشغيل Windows</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3852-post-19504.html#pid19504" target="_blank" rel="noopener" class="mycode_url"> G00d Premium F0nt 4 c0ding M0n0L1sa</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3854-post-19506.html#pid19506" target="_blank" rel="noopener" class="mycode_url"> How to instalԼ EmꞴarcadero ЯAD StuĐio 12.1 AtԨens ArꞆhitect V€rsion 29.0.51961.7529 U</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3855-post-19507.html#pid19507" target="_blank" rel="noopener" class="mycode_url"> TutoЯial Ԩow instalԼ and activaԷe CLioЍ</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3859.html" target="_blank" rel="noopener" class="mycode_url">1.3 ما هو ال preprocess ؟ وما هو ال assemble ؟ وما هو ال compile ؟ وما هو ال linking؟</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3865.html" target="_blank" rel="noopener" class="mycode_url">1.4 البرنامج C++ الأول الكلاسيكي - تفسير دقيق بناء ركيزه البرمجه</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3868.html" target="_blank" rel="noopener" class="mycode_url">1.5 التجميع - Compilation - فهم التعامل مع Compiler</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3872.html" target="_blank" rel="noopener" class="mycode_url">1.6 استكشاف الlinking من الداخل بشكل عميق مع  النوعين static  و dynamic</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3880.html" target="_blank" rel="noopener" class="mycode_url">1.7 مراجعة وتمارين الفصل الأول</a><br />
</li>
</ul>
# الفصل 2 : <ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3890.html" target="_blank" rel="noopener" class="mycode_url">2.1 الإدخال- input</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3894.html" target="_blank" rel="noopener" class="mycode_url"> 2.2 المتغيرات - variables</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3896.html" target="_blank" rel="noopener" class="mycode_url">2.3 المدخلات والنوع - Input and type</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3899.html" target="_blank" rel="noopener" class="mycode_url">2.4 العمليات Operations والمشغلات operators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3905.html" target="_blank" rel="noopener" class="mycode_url">2.5 الAssignment والInitialization</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3906-post-19645.html" target="_blank" rel="noopener" class="mycode_url">2.6 تمرين عملي - اكتشاف الكلمات المتكررة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3907.html" target="_blank" rel="noopener" class="mycode_url">2.7 العمليات المركبة للoperators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3925.html" target="_blank" rel="noopener" class="mycode_url">إنشاء برامج x86 أو x64 باستخدام MinGW وCLion</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4024.html" target="_blank" rel="noopener" class="mycode_url">2.8 أسماء في C++ - Names</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4025.html" target="_blank" rel="noopener" class="mycode_url">2.9 أنواع وكائنات - Types and objects</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4026.html" target="_blank" rel="noopener" class="mycode_url">2.10 سلامة النوع - Type safety</a><br />
</li>
<li>2.11 التحويلات Conversions<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/BArXjnJ3A-I" frameborder="0" allowfullscreen="true"></iframe></div>
<br />
<br />
التحويلات Conversions.<br />
رأينا أنه لا يمكننا إضافة الرموز مباشرة أو مقارنة double بـ int.<br />
ومع ذلك، يوفر C++ طرقًا غير مباشرة للقيام بكليهما.<br />
عند الحاجة إليها في التعبير، يتم تحويل char إلى int وتحويل int إلى double.<br />
على سبيل المثال:<br />
<pre class="block-code"><code class="language-none">char c = 'x';
int i1 = c; // i1 gets the integer value of c
int i2 = c + 1000; // i2 gets the integer value of c added to 1000
double d = i2 + 7.3; // d gets the floating-point value of i2 plus 7.3
</code></pre><br />
<br />
هنا، i1 يحصل على القيمة 120، وهي القيمة الصحيحة للحرف 'x' في مجموعة الرموز الشائعة المكونة من 8 بت، ASCII.<br />
هذه طريقة بسيطة للحصول على التمثيل العددي لحرف.<br />
للحصول على قيمة i2، يتم إجراء الإضافة باستخدام الحساب الحسابي الصحيح ويعطي القيمة 1120.<br />
يُقال إن ال char تم ترقيته إلى int قبل الإضافة.<br />
بالمثل، عندما يكون هناك مزيج من القيم العائمة والقيم الصحيحة، يتم ترقية الأعداد الصحيحة إلى العائمة لإعطاء نتائج غير متوقعة.<br />
هنا، d يحصل على القيمة 1127.3.<br />
<br />
تحويلات البيانات تنقسم إلى نوعين<br />
• توسيع widening: التحويلات التي تحتفظ بالمعلومات، مثل char إلى int.<br />
• تضييق narrowing: التحويلات التي قد تفقد المعلومات، مثل int إلى char.<br />
<br />
يقوم التحويل التوسيعي بتحويل قيمة إلى قيمة متساوية أو إلى أفضل تقريب لقيمة متساوية.<br />
عادةً، التحويلات التوسيعية تكون نعمة للمبرمج وتبسط كتابة الشفرة.<br />
لسوء الحظ، يسمح C++ أيضًا بالتحويلات التضييقية الضمنية.<br />
بالتضييق، نعني أن القيمة يتم تحويلها إلى قيمة من نوع آخر لا تتساوى مع القيمة الأصلية.<br />
فكر في int و char.<br />
التحويلات من char إلى int لا تواجه مشاكل مع التضييق.<br />
ومع ذلك، يمكن لـ char أن تحتوي فقط على قيم صحيحة صغيرة جدًا.<br />
غالبًا، يكون char بحجم 8 بت وهذا يعني بايت واحد، بينما يكون int بحجم 4 بايتات لذا حجم int هو 4 × حجم char لذلك مثل هذا سوف يفقد تلك القيمة:<br />
<pre class="block-code"><code class="language-none">char: 0000 0000
int:  0000 0000 0000 0000 0000 0000 0000 0000
</code></pre><br />
<br />
لا يمكننا وضع عدد كبير، مثل 1000، في char لأن الحد الأقصى لحجم char هو 255.<br />
هذه التحويلات تسمى التضييق لأنها تضع قيمة في كائن قد يكون صغيرًا جدًا (''ضيق'') لاستيعاب كل شيء.<br />
لسوء الحظ، التحويلات مثل double إلى int و int إلى char يتم قبولها بشكل افتراضي من قبل معظم المترجمات على الرغم من أنها تضييقية.<br />
<br />
<br />
<br />
لماذا يمكن أن يكون هذا مشكلة؟ لأننا في كثير من الأحيان لا نشتبه أن التحويل التضييقي - الذي يدمر المعلومات - قيد التنفيذ.<br />
<br />
فكر في:<pre class="block-code"><code class="language-none">double x = 2.7;
// ... lots of code ...
int y = x; // y becomes 2
</code></pre><br />
<br />
بحلول الوقت الذي نسند فيه x إلى y قد نكون قد نسينا أن x كانت double، أو أن التحويل من double إلى int يقوم بتقليص (يقرر دائمًا القرب، نحو الصفر) بدلاً من استخدام التقريب التقليدي 4/5 (التقريب نحو العدد الصحيح الأقرب).<br />
ما يحدث محدد تمامًا، ولكن ليس هناك شيء في y = x؛ لتذكيرنا بأن المعلومات (ال.7) تتم حذفها.<br />
للحصول على فهم للتحويلات والسبب في أن التحويلات التضييقية يجب تجنبها، قم بالتجربة.<br />
فكر في هذا البرنامج الذي يظهر كيفية تنفيذ التحويلات من double إلى int وتحويلات من int إلى char على جهازك:<br />
<pre class="block-code"><code class="language-none">int main()
{
    double d = 0;
    while (cin&gt;&gt;d) { // repeat the statements below as long as we type in numbers
        int i = d; // try to squeeze a floating-point value into an integer value
        char c = i; // try to squeeze an integer into a char
        cout &lt;&lt; &quot;d==&quot; &lt;&lt; d // the original double
        &lt;&lt; &quot; i==&quot;&lt;&lt; i // double converted to int
        &lt;&lt; &quot; c==&quot; &lt;&lt; c // int value of char
        &lt;&lt; &quot; char(&quot; &lt;&lt; c &lt;&lt; &quot;)\n&quot;; // the char
    }
}
</code></pre><br />
<br />
<br />
جرب هذا<br />
قم بتشغيل هذا البرنامج مع مجموعة متنوعة من المدخلات:<br />
• قيم صغيرة (مثل 2 و 3).<br />
• قيم كبيرة (أكبر من 127، أكبر من 1000).<br />
• قيم سلبية.<br />
• 56، 89، و 128.<br />
• قيم غير صحيحة (مثل 56.9 و 56.2).<br />
ستجد أن العديد من المداخل تنتج نتائج "غير معقولة" عند التحويل.<br />
بشكل أساسي، نحن نحاول وضع غالون في وعاء باليت (حوالي 4 لتر في كوب 500 ملليلتر).<br />
<br />
لماذا يقبل الناس مشكلة التحويلات التضييقية؟<br />
السبب الرئيسي هو التاريخ:<br />
ورث C++ التحويلات التضييقية من لغته الأم، C، لذلك منذ اليوم الأول لـ C++، كان هناك الكثير من الشفرة التي تعتمد على التحويلات التضييقية.<br />
أيضًا، العديد من هذه التحويلات لا تسبب فعليًا مشاكل لأن القيم المعنية تكون في النطاق، وكثير من المبرمجين يعارضون "أن يخبرهم المترجمون ما يجب فعله."<br />
وعادة ما تكون المشاكل مع التحويلات التضييقية قابلة للإدارة في البرامج الصغيرة وبالنسبة للمبرمجين ذوي الخبرة.<br />
يمكن أن تكون مصدر أخطاء في البرامج الأكبر حجمًا، على الرغم من ذلك، وسبب كبير للمشاكل بالنسبة للمبرمجين المبتدئين.<br />
لحسن الحظ، يمكن للمترجمين أن يحذروا من التحويلات التضييقية - والعديد منهم يفعلون ذلك.<br />
التزم بهذه التحذيرات.<br />
<br />
عندما نحتاج حقًا إلى التضييق، يمكننا استخدام narrow<code class="inline-code">&lt;T&gt;(x)</code> للتحقق مما إذا كان يمكن تضييق x إلى T دون فقدان المعلومات.<br />
عندما نريد التقريب، يمكننا استخدام <code class="inline-code">round_to&lt;int&gt;(x)</code>.<br />
لأسباب تاريخية وعملية، تقدم C++ أربع تسميات للتهيئة:<br />
<br />
على سبيل المثال:<br />
<pre class="block-code"><code class="language-none">int x0 = 7.8; // narrows, some compilers warn
int x1 {7.8}; // error : {} doesn’t narrow
int x2 = {7.8}; // error : ={} doesn’t narrow (the redundant = is allowed)
int x3 (7.8); // narrows, some compilers warn
</code></pre><br />
<br />
<br />
تعود تسميات = و ={} إلى الأيام الأولى من C.<br />
نستخدم التهيئة = عندما يقوم تهيئة ببساطة بنسخ مبدئها وتهيئة {} و ={} للتهيئة المعقدة أكثر وعندما<br />
نريد حماية الوقت التشغيلي ضد التضييق.<br />
<pre class="block-code"><code class="language-none">int x = 7;
double d = 7.7;
string s = &quot;Hello, World\n&quot;;
vector v = {1, 2, 3, 5, 8 };
pair p {&quot;Hello&quot;,17};
</code></pre><br />
<br />
نحتفظ التهيئة () بالتهيئة في حالات قليلة جدًا.<br />
<br />
 <img src="https://www.at4re.net/f/images/smilies/cafe.gif" alt="Cafe" title="Cafe" class="smilie smilie_23" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://i.ibb.co/MS9rsJx/dark.jpg" loading="lazy"  alt="[صورة مرفقة: dark.jpg]" class="mycode_img" /></div>
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/playlist?list=PL...qaKxmAKHrq</a><br />
<br />
<br />
# الفصل 0 : تمهيد<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3845.html" target="_blank" rel="noopener" class="mycode_url">0.1 تعلم البرمجة من خلال التطبيق: بناء أكواد جميلة وفعالة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3846.html" target="_blank" rel="noopener" class="mycode_url">0.2 صقل مهاراتك في البرمجة: التمارين والاختبارات والمشاريع المشتركة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3847.html" target="_blank" rel="noopener" class="mycode_url">0.3 بعد هذه السلسلة: رحلتك نحو إتقان البرمجة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3848.html" target="_blank" rel="noopener" class="mycode_url">0.4 رحلتك في البرمجة: نصائح وتشجيع </a><br />
</li>
</ul>
# الفصل 1 :<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3849.html" target="_blank" rel="noopener" class="mycode_url">1.0 مقدمة الفصل 1 : مرحبا بالعالم !</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3850.html" target="_blank" rel="noopener" class="mycode_url">1.1 البرامج - Programs</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3851.html" target="_blank" rel="noopener" class="mycode_url">1.2 تشغيل و Compile برنامج C++ الأول الخاص بك على نظام التشغيل Windows</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3852-post-19504.html#pid19504" target="_blank" rel="noopener" class="mycode_url"> G00d Premium F0nt 4 c0ding M0n0L1sa</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3854-post-19506.html#pid19506" target="_blank" rel="noopener" class="mycode_url"> How to instalԼ EmꞴarcadero ЯAD StuĐio 12.1 AtԨens ArꞆhitect V€rsion 29.0.51961.7529 U</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3855-post-19507.html#pid19507" target="_blank" rel="noopener" class="mycode_url"> TutoЯial Ԩow instalԼ and activaԷe CLioЍ</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3859.html" target="_blank" rel="noopener" class="mycode_url">1.3 ما هو ال preprocess ؟ وما هو ال assemble ؟ وما هو ال compile ؟ وما هو ال linking؟</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3865.html" target="_blank" rel="noopener" class="mycode_url">1.4 البرنامج C++ الأول الكلاسيكي - تفسير دقيق بناء ركيزه البرمجه</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3868.html" target="_blank" rel="noopener" class="mycode_url">1.5 التجميع - Compilation - فهم التعامل مع Compiler</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3872.html" target="_blank" rel="noopener" class="mycode_url">1.6 استكشاف الlinking من الداخل بشكل عميق مع  النوعين static  و dynamic</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3880.html" target="_blank" rel="noopener" class="mycode_url">1.7 مراجعة وتمارين الفصل الأول</a><br />
</li>
</ul>
# الفصل 2 : <ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3890.html" target="_blank" rel="noopener" class="mycode_url">2.1 الإدخال- input</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3894.html" target="_blank" rel="noopener" class="mycode_url"> 2.2 المتغيرات - variables</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3896.html" target="_blank" rel="noopener" class="mycode_url">2.3 المدخلات والنوع - Input and type</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3899.html" target="_blank" rel="noopener" class="mycode_url">2.4 العمليات Operations والمشغلات operators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3905.html" target="_blank" rel="noopener" class="mycode_url">2.5 الAssignment والInitialization</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3906-post-19645.html" target="_blank" rel="noopener" class="mycode_url">2.6 تمرين عملي - اكتشاف الكلمات المتكررة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3907.html" target="_blank" rel="noopener" class="mycode_url">2.7 العمليات المركبة للoperators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3925.html" target="_blank" rel="noopener" class="mycode_url">إنشاء برامج x86 أو x64 باستخدام MinGW وCLion</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4024.html" target="_blank" rel="noopener" class="mycode_url">2.8 أسماء في C++ - Names</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4025.html" target="_blank" rel="noopener" class="mycode_url">2.9 أنواع وكائنات - Types and objects</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4026.html" target="_blank" rel="noopener" class="mycode_url">2.10 سلامة النوع - Type safety</a><br />
</li>
<li>2.11 التحويلات Conversions<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/BArXjnJ3A-I" frameborder="0" allowfullscreen="true"></iframe></div>
<br />
<br />
التحويلات Conversions.<br />
رأينا أنه لا يمكننا إضافة الرموز مباشرة أو مقارنة double بـ int.<br />
ومع ذلك، يوفر C++ طرقًا غير مباشرة للقيام بكليهما.<br />
عند الحاجة إليها في التعبير، يتم تحويل char إلى int وتحويل int إلى double.<br />
على سبيل المثال:<br />
<pre class="block-code"><code class="language-none">char c = 'x';
int i1 = c; // i1 gets the integer value of c
int i2 = c + 1000; // i2 gets the integer value of c added to 1000
double d = i2 + 7.3; // d gets the floating-point value of i2 plus 7.3
</code></pre><br />
<br />
هنا، i1 يحصل على القيمة 120، وهي القيمة الصحيحة للحرف 'x' في مجموعة الرموز الشائعة المكونة من 8 بت، ASCII.<br />
هذه طريقة بسيطة للحصول على التمثيل العددي لحرف.<br />
للحصول على قيمة i2، يتم إجراء الإضافة باستخدام الحساب الحسابي الصحيح ويعطي القيمة 1120.<br />
يُقال إن ال char تم ترقيته إلى int قبل الإضافة.<br />
بالمثل، عندما يكون هناك مزيج من القيم العائمة والقيم الصحيحة، يتم ترقية الأعداد الصحيحة إلى العائمة لإعطاء نتائج غير متوقعة.<br />
هنا، d يحصل على القيمة 1127.3.<br />
<br />
تحويلات البيانات تنقسم إلى نوعين<br />
• توسيع widening: التحويلات التي تحتفظ بالمعلومات، مثل char إلى int.<br />
• تضييق narrowing: التحويلات التي قد تفقد المعلومات، مثل int إلى char.<br />
<br />
يقوم التحويل التوسيعي بتحويل قيمة إلى قيمة متساوية أو إلى أفضل تقريب لقيمة متساوية.<br />
عادةً، التحويلات التوسيعية تكون نعمة للمبرمج وتبسط كتابة الشفرة.<br />
لسوء الحظ، يسمح C++ أيضًا بالتحويلات التضييقية الضمنية.<br />
بالتضييق، نعني أن القيمة يتم تحويلها إلى قيمة من نوع آخر لا تتساوى مع القيمة الأصلية.<br />
فكر في int و char.<br />
التحويلات من char إلى int لا تواجه مشاكل مع التضييق.<br />
ومع ذلك، يمكن لـ char أن تحتوي فقط على قيم صحيحة صغيرة جدًا.<br />
غالبًا، يكون char بحجم 8 بت وهذا يعني بايت واحد، بينما يكون int بحجم 4 بايتات لذا حجم int هو 4 × حجم char لذلك مثل هذا سوف يفقد تلك القيمة:<br />
<pre class="block-code"><code class="language-none">char: 0000 0000
int:  0000 0000 0000 0000 0000 0000 0000 0000
</code></pre><br />
<br />
لا يمكننا وضع عدد كبير، مثل 1000، في char لأن الحد الأقصى لحجم char هو 255.<br />
هذه التحويلات تسمى التضييق لأنها تضع قيمة في كائن قد يكون صغيرًا جدًا (''ضيق'') لاستيعاب كل شيء.<br />
لسوء الحظ، التحويلات مثل double إلى int و int إلى char يتم قبولها بشكل افتراضي من قبل معظم المترجمات على الرغم من أنها تضييقية.<br />
<br />
<br />
<br />
لماذا يمكن أن يكون هذا مشكلة؟ لأننا في كثير من الأحيان لا نشتبه أن التحويل التضييقي - الذي يدمر المعلومات - قيد التنفيذ.<br />
<br />
فكر في:<pre class="block-code"><code class="language-none">double x = 2.7;
// ... lots of code ...
int y = x; // y becomes 2
</code></pre><br />
<br />
بحلول الوقت الذي نسند فيه x إلى y قد نكون قد نسينا أن x كانت double، أو أن التحويل من double إلى int يقوم بتقليص (يقرر دائمًا القرب، نحو الصفر) بدلاً من استخدام التقريب التقليدي 4/5 (التقريب نحو العدد الصحيح الأقرب).<br />
ما يحدث محدد تمامًا، ولكن ليس هناك شيء في y = x؛ لتذكيرنا بأن المعلومات (ال.7) تتم حذفها.<br />
للحصول على فهم للتحويلات والسبب في أن التحويلات التضييقية يجب تجنبها، قم بالتجربة.<br />
فكر في هذا البرنامج الذي يظهر كيفية تنفيذ التحويلات من double إلى int وتحويلات من int إلى char على جهازك:<br />
<pre class="block-code"><code class="language-none">int main()
{
    double d = 0;
    while (cin&gt;&gt;d) { // repeat the statements below as long as we type in numbers
        int i = d; // try to squeeze a floating-point value into an integer value
        char c = i; // try to squeeze an integer into a char
        cout &lt;&lt; &quot;d==&quot; &lt;&lt; d // the original double
        &lt;&lt; &quot; i==&quot;&lt;&lt; i // double converted to int
        &lt;&lt; &quot; c==&quot; &lt;&lt; c // int value of char
        &lt;&lt; &quot; char(&quot; &lt;&lt; c &lt;&lt; &quot;)\n&quot;; // the char
    }
}
</code></pre><br />
<br />
<br />
جرب هذا<br />
قم بتشغيل هذا البرنامج مع مجموعة متنوعة من المدخلات:<br />
• قيم صغيرة (مثل 2 و 3).<br />
• قيم كبيرة (أكبر من 127، أكبر من 1000).<br />
• قيم سلبية.<br />
• 56، 89، و 128.<br />
• قيم غير صحيحة (مثل 56.9 و 56.2).<br />
ستجد أن العديد من المداخل تنتج نتائج "غير معقولة" عند التحويل.<br />
بشكل أساسي، نحن نحاول وضع غالون في وعاء باليت (حوالي 4 لتر في كوب 500 ملليلتر).<br />
<br />
لماذا يقبل الناس مشكلة التحويلات التضييقية؟<br />
السبب الرئيسي هو التاريخ:<br />
ورث C++ التحويلات التضييقية من لغته الأم، C، لذلك منذ اليوم الأول لـ C++، كان هناك الكثير من الشفرة التي تعتمد على التحويلات التضييقية.<br />
أيضًا، العديد من هذه التحويلات لا تسبب فعليًا مشاكل لأن القيم المعنية تكون في النطاق، وكثير من المبرمجين يعارضون "أن يخبرهم المترجمون ما يجب فعله."<br />
وعادة ما تكون المشاكل مع التحويلات التضييقية قابلة للإدارة في البرامج الصغيرة وبالنسبة للمبرمجين ذوي الخبرة.<br />
يمكن أن تكون مصدر أخطاء في البرامج الأكبر حجمًا، على الرغم من ذلك، وسبب كبير للمشاكل بالنسبة للمبرمجين المبتدئين.<br />
لحسن الحظ، يمكن للمترجمين أن يحذروا من التحويلات التضييقية - والعديد منهم يفعلون ذلك.<br />
التزم بهذه التحذيرات.<br />
<br />
عندما نحتاج حقًا إلى التضييق، يمكننا استخدام narrow<code class="inline-code">&lt;T&gt;(x)</code> للتحقق مما إذا كان يمكن تضييق x إلى T دون فقدان المعلومات.<br />
عندما نريد التقريب، يمكننا استخدام <code class="inline-code">round_to&lt;int&gt;(x)</code>.<br />
لأسباب تاريخية وعملية، تقدم C++ أربع تسميات للتهيئة:<br />
<br />
على سبيل المثال:<br />
<pre class="block-code"><code class="language-none">int x0 = 7.8; // narrows, some compilers warn
int x1 {7.8}; // error : {} doesn’t narrow
int x2 = {7.8}; // error : ={} doesn’t narrow (the redundant = is allowed)
int x3 (7.8); // narrows, some compilers warn
</code></pre><br />
<br />
<br />
تعود تسميات = و ={} إلى الأيام الأولى من C.<br />
نستخدم التهيئة = عندما يقوم تهيئة ببساطة بنسخ مبدئها وتهيئة {} و ={} للتهيئة المعقدة أكثر وعندما<br />
نريد حماية الوقت التشغيلي ضد التضييق.<br />
<pre class="block-code"><code class="language-none">int x = 7;
double d = 7.7;
string s = &quot;Hello, World\n&quot;;
vector v = {1, 2, 3, 5, 8 };
pair p {&quot;Hello&quot;,17};
</code></pre><br />
<br />
نحتفظ التهيئة () بالتهيئة في حالات قليلة جدًا.<br />
<br />
 <img src="https://www.at4re.net/f/images/smilies/cafe.gif" alt="Cafe" title="Cafe" class="smilie smilie_23" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[2.10 سلامة النوع - Type safety]]></title>
			<link>https://www.at4re.net/f/thread-4026.html</link>
			<pubDate>Sun, 19 May 2024 09:10:45 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=0">R333T</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4026.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://i.ibb.co/MS9rsJx/dark.jpg" loading="lazy"  alt="[صورة مرفقة: dark.jpg]" class="mycode_img" /></div>
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/playlist?list=PL...qaKxmAKHrq</a><br />
<br />
<br />
# الفصل 0 : تمهيد<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3845.html" target="_blank" rel="noopener" class="mycode_url">0.1 تعلم البرمجة من خلال التطبيق: بناء أكواد جميلة وفعالة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3846.html" target="_blank" rel="noopener" class="mycode_url">0.2 صقل مهاراتك في البرمجة: التمارين والاختبارات والمشاريع المشتركة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3847.html" target="_blank" rel="noopener" class="mycode_url">0.3 بعد هذه السلسلة: رحلتك نحو إتقان البرمجة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3848.html" target="_blank" rel="noopener" class="mycode_url">0.4 رحلتك في البرمجة: نصائح وتشجيع </a><br />
</li>
</ul>
# الفصل 1 :<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3849.html" target="_blank" rel="noopener" class="mycode_url">1.0 مقدمة الفصل 1 : مرحبا بالعالم !</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3850.html" target="_blank" rel="noopener" class="mycode_url">1.1 البرامج - Programs</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3851.html" target="_blank" rel="noopener" class="mycode_url">1.2 تشغيل و Compile برنامج C++ الأول الخاص بك على نظام التشغيل Windows</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3852-post-19504.html#pid19504" target="_blank" rel="noopener" class="mycode_url"> G00d Premium F0nt 4 c0ding M0n0L1sa</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3854-post-19506.html#pid19506" target="_blank" rel="noopener" class="mycode_url"> How to instalԼ EmꞴarcadero ЯAD StuĐio 12.1 AtԨens ArꞆhitect V€rsion 29.0.51961.7529 U</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3855-post-19507.html#pid19507" target="_blank" rel="noopener" class="mycode_url"> TutoЯial Ԩow instalԼ and activaԷe CLioЍ</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3859.html" target="_blank" rel="noopener" class="mycode_url">1.3 ما هو ال preprocess ؟ وما هو ال assemble ؟ وما هو ال compile ؟ وما هو ال linking؟</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3865.html" target="_blank" rel="noopener" class="mycode_url">1.4 البرنامج C++ الأول الكلاسيكي - تفسير دقيق بناء ركيزه البرمجه</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3868.html" target="_blank" rel="noopener" class="mycode_url">1.5 التجميع - Compilation - فهم التعامل مع Compiler</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3872.html" target="_blank" rel="noopener" class="mycode_url">1.6 استكشاف الlinking من الداخل بشكل عميق مع  النوعين static  و dynamic</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3880.html" target="_blank" rel="noopener" class="mycode_url">1.7 مراجعة وتمارين الفصل الأول</a><br />
</li>
</ul>
# الفصل 2 : <ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3890.html" target="_blank" rel="noopener" class="mycode_url">2.1 الإدخال- input</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3894.html" target="_blank" rel="noopener" class="mycode_url"> 2.2 المتغيرات - variables</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3896.html" target="_blank" rel="noopener" class="mycode_url">2.3 المدخلات والنوع - Input and type</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3899.html" target="_blank" rel="noopener" class="mycode_url">2.4 العمليات Operations والمشغلات operators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3905.html" target="_blank" rel="noopener" class="mycode_url">2.5 الAssignment والInitialization</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3906-post-19645.html" target="_blank" rel="noopener" class="mycode_url">2.6 تمرين عملي - اكتشاف الكلمات المتكررة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3907.html" target="_blank" rel="noopener" class="mycode_url">2.7 العمليات المركبة للoperators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3925.html" target="_blank" rel="noopener" class="mycode_url">إنشاء برامج x86 أو x64 باستخدام MinGW وCLion</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4024.html" target="_blank" rel="noopener" class="mycode_url">2.8 أسماء في C++ - Names</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4025.html" target="_blank" rel="noopener" class="mycode_url">2.9 أنواع وكائنات - Types and objects</a><br />
</li>
<li>2.10 سلامة النوع - Type safety<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/KMC4WsRPCNI" frameborder="0" allowfullscreen="true"></iframe></div>
<br />
<br />
سلامة النوع - Type safety.<br />
<br />
كل كائن يتم تعيينه نوعًا عند تعريفه، وهذا النوع لا يتغير أبدًا.<br />
يكون البرنامج - أو جزء من البرنامج - آمنًا من النوع عند استخدام جميع الكائنات وفقًا لقواعد نوعها.<br />
يعتبر الأمان التام من النوع المثالي والقاعدة العامة للغة.<br />
للأسف، لا يمكن لمترجم C++ بمفرده ضمان الأمان التام من النوع للكود التعسفي، لذا يجب علينا تجنب التقنيات غير الآمنة.<br />
أي أنه يجب علينا الامتثال لبعض قواعد البرمجة لتحقيق الأمان من النوع.<br />
<br />
هناك طرق لفرض هذه القواعد، ولكن تاريخيًا، اعتبرت هذه القواعد محدودة بشكل زائد ولم يتم فرضها بشكل منتظم.<br />
نظرًا للاعتماد على الإصدارات القديمة من C++ (قبل المعايير الحديثة لـ ISO C++) والتقنيات المعتمدة من لغة C، كان ذلك لا مفر منه ولذلك ليس غير معقول.<br />
ومع ذلك، عند استخدام C++ الحديثة وأدوات التحليل الحديثة، يمكن التحقق من أمان النوع لمعظم استخدامات C++.<br />
الهدف هو أبدًا استخدام ميزات اللغة التي لا يمكن إثبات سلامتها من النوع قبل بدء تنفيذ البرنامج: الأمان الثابت من النوع.<br />
باستثناء الكود المستخدم بوضوح لتوضيح التقنيات غير الآمنة، يتبع إرشادات نواة C++ [CG] وقد تم التحقق من أمان النوع.<br />
الهدف من الأمان من النوع مهم للغاية عند كتابة الكود الموثوق به.<br />
لهذا السبب نقضي وقتًا على ذلك.<br />
يرجى ملاحظة المصائد وتجنبها.<br />
إذا لم تفعل ذلك، فستواجه الكثير من الإحباط وسيحتوي الكود الخاص بك على العديد من الأخطاء الغامضة.<br />
<br />
<br />
<br />
<br />
على سبيل المثال، استخدام متغير غير مبتدئ ليس من الأمان من النوع:<br />
<pre class="block-code"><code class="language-none">int main()
{
double x; // we &quot;forgot&quot; to initialize: the value of x is undefined
double y = x; // the value of y is undefined
double z = 2.0+x; // the meaning of + and the value of z are undefined
}
</code></pre><br />
<br />
قم دائمًا بتهيئة متغيراتك! يمكن للتنفيذات تنفيذ هذه القاعدة بسهولة، ولكن لسوء الحظ عادةً ما لا يفعلون ذلك افتراضيًا. باستثناء، لحسن الحظ، لأنواع مثل السلسلة والفكتور حيث يتم ضمان التهيئة الافتراضية.<br />
اكتشف كيفية تمكين التحذيرات (غالبًا بخيار المترجم -Wall)  (often a -Wall compiler option) والالتزام بها. فعل ذلك سيوفر لك الكثير من العناء.<br />
<br />
تأتي تنفيذات C++ الحديثة أيضًا مع أدوات تحليل ثابتة مهمة تسمح لنا بمنع المشاكل الأكثر دقة.<br />
يستخدم المحترفون مثل هذه الأدوات بشكل واسع، وسوف تستخدمها أيضًا إذا أصبحت أو تهدف لتصبح محترفًا، ولكن في هذه المرحلة الأولية من التعلم، اتبع فقط القواعد والأساليب المستخدمة.<br />
<br />
<br />
 <img src="https://www.at4re.net/f/images/smilies/dance.gif" alt="dance" title="dance" class="smilie smilie_40" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://i.ibb.co/MS9rsJx/dark.jpg" loading="lazy"  alt="[صورة مرفقة: dark.jpg]" class="mycode_img" /></div>
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/playlist?list=PL...qaKxmAKHrq</a><br />
<br />
<br />
# الفصل 0 : تمهيد<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3845.html" target="_blank" rel="noopener" class="mycode_url">0.1 تعلم البرمجة من خلال التطبيق: بناء أكواد جميلة وفعالة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3846.html" target="_blank" rel="noopener" class="mycode_url">0.2 صقل مهاراتك في البرمجة: التمارين والاختبارات والمشاريع المشتركة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3847.html" target="_blank" rel="noopener" class="mycode_url">0.3 بعد هذه السلسلة: رحلتك نحو إتقان البرمجة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3848.html" target="_blank" rel="noopener" class="mycode_url">0.4 رحلتك في البرمجة: نصائح وتشجيع </a><br />
</li>
</ul>
# الفصل 1 :<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3849.html" target="_blank" rel="noopener" class="mycode_url">1.0 مقدمة الفصل 1 : مرحبا بالعالم !</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3850.html" target="_blank" rel="noopener" class="mycode_url">1.1 البرامج - Programs</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3851.html" target="_blank" rel="noopener" class="mycode_url">1.2 تشغيل و Compile برنامج C++ الأول الخاص بك على نظام التشغيل Windows</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3852-post-19504.html#pid19504" target="_blank" rel="noopener" class="mycode_url"> G00d Premium F0nt 4 c0ding M0n0L1sa</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3854-post-19506.html#pid19506" target="_blank" rel="noopener" class="mycode_url"> How to instalԼ EmꞴarcadero ЯAD StuĐio 12.1 AtԨens ArꞆhitect V€rsion 29.0.51961.7529 U</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3855-post-19507.html#pid19507" target="_blank" rel="noopener" class="mycode_url"> TutoЯial Ԩow instalԼ and activaԷe CLioЍ</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3859.html" target="_blank" rel="noopener" class="mycode_url">1.3 ما هو ال preprocess ؟ وما هو ال assemble ؟ وما هو ال compile ؟ وما هو ال linking؟</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3865.html" target="_blank" rel="noopener" class="mycode_url">1.4 البرنامج C++ الأول الكلاسيكي - تفسير دقيق بناء ركيزه البرمجه</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3868.html" target="_blank" rel="noopener" class="mycode_url">1.5 التجميع - Compilation - فهم التعامل مع Compiler</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3872.html" target="_blank" rel="noopener" class="mycode_url">1.6 استكشاف الlinking من الداخل بشكل عميق مع  النوعين static  و dynamic</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3880.html" target="_blank" rel="noopener" class="mycode_url">1.7 مراجعة وتمارين الفصل الأول</a><br />
</li>
</ul>
# الفصل 2 : <ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3890.html" target="_blank" rel="noopener" class="mycode_url">2.1 الإدخال- input</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3894.html" target="_blank" rel="noopener" class="mycode_url"> 2.2 المتغيرات - variables</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3896.html" target="_blank" rel="noopener" class="mycode_url">2.3 المدخلات والنوع - Input and type</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3899.html" target="_blank" rel="noopener" class="mycode_url">2.4 العمليات Operations والمشغلات operators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3905.html" target="_blank" rel="noopener" class="mycode_url">2.5 الAssignment والInitialization</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3906-post-19645.html" target="_blank" rel="noopener" class="mycode_url">2.6 تمرين عملي - اكتشاف الكلمات المتكررة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3907.html" target="_blank" rel="noopener" class="mycode_url">2.7 العمليات المركبة للoperators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3925.html" target="_blank" rel="noopener" class="mycode_url">إنشاء برامج x86 أو x64 باستخدام MinGW وCLion</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4024.html" target="_blank" rel="noopener" class="mycode_url">2.8 أسماء في C++ - Names</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4025.html" target="_blank" rel="noopener" class="mycode_url">2.9 أنواع وكائنات - Types and objects</a><br />
</li>
<li>2.10 سلامة النوع - Type safety<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/KMC4WsRPCNI" frameborder="0" allowfullscreen="true"></iframe></div>
<br />
<br />
سلامة النوع - Type safety.<br />
<br />
كل كائن يتم تعيينه نوعًا عند تعريفه، وهذا النوع لا يتغير أبدًا.<br />
يكون البرنامج - أو جزء من البرنامج - آمنًا من النوع عند استخدام جميع الكائنات وفقًا لقواعد نوعها.<br />
يعتبر الأمان التام من النوع المثالي والقاعدة العامة للغة.<br />
للأسف، لا يمكن لمترجم C++ بمفرده ضمان الأمان التام من النوع للكود التعسفي، لذا يجب علينا تجنب التقنيات غير الآمنة.<br />
أي أنه يجب علينا الامتثال لبعض قواعد البرمجة لتحقيق الأمان من النوع.<br />
<br />
هناك طرق لفرض هذه القواعد، ولكن تاريخيًا، اعتبرت هذه القواعد محدودة بشكل زائد ولم يتم فرضها بشكل منتظم.<br />
نظرًا للاعتماد على الإصدارات القديمة من C++ (قبل المعايير الحديثة لـ ISO C++) والتقنيات المعتمدة من لغة C، كان ذلك لا مفر منه ولذلك ليس غير معقول.<br />
ومع ذلك، عند استخدام C++ الحديثة وأدوات التحليل الحديثة، يمكن التحقق من أمان النوع لمعظم استخدامات C++.<br />
الهدف هو أبدًا استخدام ميزات اللغة التي لا يمكن إثبات سلامتها من النوع قبل بدء تنفيذ البرنامج: الأمان الثابت من النوع.<br />
باستثناء الكود المستخدم بوضوح لتوضيح التقنيات غير الآمنة، يتبع إرشادات نواة C++ [CG] وقد تم التحقق من أمان النوع.<br />
الهدف من الأمان من النوع مهم للغاية عند كتابة الكود الموثوق به.<br />
لهذا السبب نقضي وقتًا على ذلك.<br />
يرجى ملاحظة المصائد وتجنبها.<br />
إذا لم تفعل ذلك، فستواجه الكثير من الإحباط وسيحتوي الكود الخاص بك على العديد من الأخطاء الغامضة.<br />
<br />
<br />
<br />
<br />
على سبيل المثال، استخدام متغير غير مبتدئ ليس من الأمان من النوع:<br />
<pre class="block-code"><code class="language-none">int main()
{
double x; // we &quot;forgot&quot; to initialize: the value of x is undefined
double y = x; // the value of y is undefined
double z = 2.0+x; // the meaning of + and the value of z are undefined
}
</code></pre><br />
<br />
قم دائمًا بتهيئة متغيراتك! يمكن للتنفيذات تنفيذ هذه القاعدة بسهولة، ولكن لسوء الحظ عادةً ما لا يفعلون ذلك افتراضيًا. باستثناء، لحسن الحظ، لأنواع مثل السلسلة والفكتور حيث يتم ضمان التهيئة الافتراضية.<br />
اكتشف كيفية تمكين التحذيرات (غالبًا بخيار المترجم -Wall)  (often a -Wall compiler option) والالتزام بها. فعل ذلك سيوفر لك الكثير من العناء.<br />
<br />
تأتي تنفيذات C++ الحديثة أيضًا مع أدوات تحليل ثابتة مهمة تسمح لنا بمنع المشاكل الأكثر دقة.<br />
يستخدم المحترفون مثل هذه الأدوات بشكل واسع، وسوف تستخدمها أيضًا إذا أصبحت أو تهدف لتصبح محترفًا، ولكن في هذه المرحلة الأولية من التعلم، اتبع فقط القواعد والأساليب المستخدمة.<br />
<br />
<br />
 <img src="https://www.at4re.net/f/images/smilies/dance.gif" alt="dance" title="dance" class="smilie smilie_40" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[2.9 أنواع وكائنات - Types and objects]]></title>
			<link>https://www.at4re.net/f/thread-4025.html</link>
			<pubDate>Sun, 19 May 2024 08:04:33 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.at4re.net/f/member.php?action=profile&uid=0">R333T</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.at4re.net/f/thread-4025.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://i.ibb.co/MS9rsJx/dark.jpg" loading="lazy"  alt="[صورة مرفقة: dark.jpg]" class="mycode_img" /></div>
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/playlist?list=PL...qaKxmAKHrq</a><br />
<br />
<br />
# الفصل 0 : تمهيد<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3845.html" target="_blank" rel="noopener" class="mycode_url">0.1 تعلم البرمجة من خلال التطبيق: بناء أكواد جميلة وفعالة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3846.html" target="_blank" rel="noopener" class="mycode_url">0.2 صقل مهاراتك في البرمجة: التمارين والاختبارات والمشاريع المشتركة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3847.html" target="_blank" rel="noopener" class="mycode_url">0.3 بعد هذه السلسلة: رحلتك نحو إتقان البرمجة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3848.html" target="_blank" rel="noopener" class="mycode_url">0.4 رحلتك في البرمجة: نصائح وتشجيع </a><br />
</li>
</ul>
# الفصل 1 :<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3849.html" target="_blank" rel="noopener" class="mycode_url">1.0 مقدمة الفصل 1 : مرحبا بالعالم !</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3850.html" target="_blank" rel="noopener" class="mycode_url">1.1 البرامج - Programs</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3851.html" target="_blank" rel="noopener" class="mycode_url">1.2 تشغيل و Compile برنامج C++ الأول الخاص بك على نظام التشغيل Windows</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3852-post-19504.html#pid19504" target="_blank" rel="noopener" class="mycode_url"> G00d Premium F0nt 4 c0ding M0n0L1sa</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3854-post-19506.html#pid19506" target="_blank" rel="noopener" class="mycode_url"> How to instalԼ EmꞴarcadero ЯAD StuĐio 12.1 AtԨens ArꞆhitect V€rsion 29.0.51961.7529 U</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3855-post-19507.html#pid19507" target="_blank" rel="noopener" class="mycode_url"> TutoЯial Ԩow instalԼ and activaԷe CLioЍ</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3859.html" target="_blank" rel="noopener" class="mycode_url">1.3 ما هو ال preprocess ؟ وما هو ال assemble ؟ وما هو ال compile ؟ وما هو ال linking؟</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3865.html" target="_blank" rel="noopener" class="mycode_url">1.4 البرنامج C++ الأول الكلاسيكي - تفسير دقيق بناء ركيزه البرمجه</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3868.html" target="_blank" rel="noopener" class="mycode_url">1.5 التجميع - Compilation - فهم التعامل مع Compiler</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3872.html" target="_blank" rel="noopener" class="mycode_url">1.6 استكشاف الlinking من الداخل بشكل عميق مع  النوعين static  و dynamic</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3880.html" target="_blank" rel="noopener" class="mycode_url">1.7 مراجعة وتمارين الفصل الأول</a><br />
</li>
</ul>
# الفصل 2 : <ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3890.html" target="_blank" rel="noopener" class="mycode_url">2.1 الإدخال- input</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3894.html" target="_blank" rel="noopener" class="mycode_url"> 2.2 المتغيرات - variables</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3896.html" target="_blank" rel="noopener" class="mycode_url">2.3 المدخلات والنوع - Input and type</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3899.html" target="_blank" rel="noopener" class="mycode_url">2.4 العمليات Operations والمشغلات operators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3905.html" target="_blank" rel="noopener" class="mycode_url">2.5 الAssignment والInitialization</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3906-post-19645.html" target="_blank" rel="noopener" class="mycode_url">2.6 تمرين عملي - اكتشاف الكلمات المتكررة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3907.html" target="_blank" rel="noopener" class="mycode_url">2.7 العمليات المركبة للoperators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3925.html" target="_blank" rel="noopener" class="mycode_url">إنشاء برامج x86 أو x64 باستخدام MinGW وCLion</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4024.html" target="_blank" rel="noopener" class="mycode_url">2.8 أسماء في C++ - Names</a><br />
</li>
<li>2.9 أنواع وكائنات - Types and objects<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/QN97CDOEh8k" frameborder="0" allowfullscreen="true"></iframe></div>
<br />
<br />
أنواع وكائنات - Types and objects<br />
<br />
مفهوم النوع مركزي في C++ ومعظم لغات البرمجة الأخرى. <br />
دعونا نلقي نظرة أقرب وأكثر تقنية على الأنواع:<br />
• يعرف النوع type مجموعة من القيم الممكنة ومجموعة من العمليات (لكائن).<br />
• A type defines a set of possible values and a set of operations (for an object).<br />
• الكائن هو بعض الذاكرة التي تحمل قيمة من نوع معين.<br />
• An object is some memory that holds a value of a given type.<br />
• القيمة هي مجموعة من البتات في الذاكرة يتم تفسيرها وفقًا لنوع.<br />
• A value is a set of bits in memory interpreted according to a type.<br />
• المتغير هو كائن مسمى.<br />
• A variable is a named object.<br />
• الإعلان هو بيان يُعطي اسمًا ونوعًا لكائن.<br />
• A declaration is a statement that gives a name and a type to an object.<br />
• التعريف هو إعلان يحجز ذاكرة لكائن.<br />
• A definition is a declaration that sets aside memory for an object.<br />
<br />
بشكل غير رسمي، نعتقد بأن الكائن هو صندوق يمكننا وضع قيم من نوع معين فيه. يمكن لصندوق int أن يحمل أعدادًا صحيحة، مثل 7، 42، و -399. يمكن لصندوق السلسلة أن يحمل قيم سلسلة حرفية، مثل<br />
<br />
"Interoperability", "operators: +−∗/%", و "Old man had a farm".<br />
<br />
<br />
بصورة رسومية، يمكننا التفكير في ذلك بهذه الطريقة:<br />
<br />
<br />
int a = 7; <br />
تعريف متغير صحيح a يحتوي على الرقم 7:<br />
<br />
int b = 9;<br />
تعريف متغير صحيح b يحتوي على الرقم 9:<br />
<br />
char c = ’a’;<br />
تعريف متغير حرفي c يحتوي على الحرف 'a':<br />
<br />
double x = 1.2;<br />
تعريف متغير عشري x يحتوي على الرقم 1.2:<br />
<br />
string s1 = "Hello, World!";<br />
تعريف متغير سلسلة s1 يحتوي على السلسلة "Hello, World!":<br />
<br />
string s2 = "1.2";<br />
تعريف متغير سلسلة s2 يحتوي على السلسلة "1.2":<br />
<br />
<br />
<br />
تمثيل السلسلة أكثر تعقيدًا قليلاً من ذلك للعدد الصحيح لأن السلسلة تتتبع عدد الأحرف التي تحتوي عليها. <br />
لاحظ أن النوع double يخزن العدد بينما تخزن السلسلة الأحرف. <br />
على سبيل المثال، يخزن x العدد 1.2، بينما تخزن s2 الأحرف الثلاث '1'، '.'، و '2'.<br />
لا يتم تخزين علامات التنصيص للحرف والسلسلة بصورة فعلية.<br />
كل int هو من نفس الحجم؛ أي أن المترجم يحجز نفس الكمية الثابتة من الذاكرة لكل int. <br />
على جهاز كمبيوتر معتاد أو هاتف ذكي، تكون هذه الكمية 4 بايت (32 بت).<br />
بالمثل، bools، chars، و doubles لها أحجام ثابتة. <br />
<br />
عادةً ما ستجد أن الكمبيوتر يستخدم بايتًا (8 بت) لل bool أو ال char و 8 بايت لل double. <br />
لاحظ أن أنواع الكائنات المختلفة تستغرق كميات مختلفة من المساحة.<br />
وبشكل خاص، يستغرق char مساحة أقل من int، وتختلف السلسلة عن ال double و int و char في أن السلاسل المختلفة قد تستغرق كميات مختلفة من المساحة.<br />
المعنى الذي تحمله البتات في الذاكرة يعتمد تمامًا على النوع المستخدم للوصول إليها.<br />
<br />
فكر في ذلك بهذه الطريقة:<br />
الذاكرة الكمبيوترية لا تعرف عن أنواعنا؛ إنها مجرد ذاكرة. <br />
تحصل البتات في الذاكرة على معنى فقط عندما نقرر كيفية تفسير تلك الذاكرة. <br />
هذا مشابه لما نفعله كل يوم عند استخدام الأرقام.<br />
ما معنى 12.5؟ لا نعرف. <br />
يمكن أن يكون 12.5 دولار، 12.5 سنتيمتر، أو 12.5 جالون.<br />
فقط عندما نحدد الوحدة يكون التعبير 12.5 له معنى. <br />
<br />
على سبيل المثال، نفس البتات في الذاكرة التي تمثل القيمة الصحيحة 120 عند النظر إليها على أنها int ستكون الحرف 'x' عند النظر إليها ك char. <br />
إذا تم النظر إليها كسلسلة، فلن يكون لها معنى على الإطلاق وستصبح خطأ تشغيل إذا حاولنا استخدامها.<br />
يمكننا توضيح ذلك بصورة رسومية بهذه الطريقة، باستخدام 1 و 0 للإشارة إلى قيمة البتات في الذاكرة:<br />
00000000 00000000 00000000 01111000<br />
<br />
هذا هو تعيين البتات لمنطقة من الذاكرة (كلمة) يمكن قراءتها على أنها int (120) أو ك char ('x'، عند النظر إلى آخر 8 بت فقط). <br />
البت هو وحدة من ذاكرة الكمبيوتر التي يمكن أن تحتوي على القيمة 0 أو 1.<br />
<br />
<br />
 <img src="https://www.at4re.net/f/images/smilies/nice.gif" alt="nice" title="nice" class="smilie smilie_33" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="https://i.ibb.co/MS9rsJx/dark.jpg" loading="lazy"  alt="[صورة مرفقة: dark.jpg]" class="mycode_img" /></div>
رحلة في عالم البرمجة: إتقان أساسيات البرمجة وتطبيقاتها باستخدام لغة C++<br />
<br />
<a href="https://www.youtube.com/playlist?list=PLmOrGO9IfJEcDyuBLOX5AzAqaKxmAKHrq" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/playlist?list=PL...qaKxmAKHrq</a><br />
<br />
<br />
# الفصل 0 : تمهيد<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3845.html" target="_blank" rel="noopener" class="mycode_url">0.1 تعلم البرمجة من خلال التطبيق: بناء أكواد جميلة وفعالة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3846.html" target="_blank" rel="noopener" class="mycode_url">0.2 صقل مهاراتك في البرمجة: التمارين والاختبارات والمشاريع المشتركة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3847.html" target="_blank" rel="noopener" class="mycode_url">0.3 بعد هذه السلسلة: رحلتك نحو إتقان البرمجة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3848.html" target="_blank" rel="noopener" class="mycode_url">0.4 رحلتك في البرمجة: نصائح وتشجيع </a><br />
</li>
</ul>
# الفصل 1 :<ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3849.html" target="_blank" rel="noopener" class="mycode_url">1.0 مقدمة الفصل 1 : مرحبا بالعالم !</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3850.html" target="_blank" rel="noopener" class="mycode_url">1.1 البرامج - Programs</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3851.html" target="_blank" rel="noopener" class="mycode_url">1.2 تشغيل و Compile برنامج C++ الأول الخاص بك على نظام التشغيل Windows</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3852-post-19504.html#pid19504" target="_blank" rel="noopener" class="mycode_url"> G00d Premium F0nt 4 c0ding M0n0L1sa</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3854-post-19506.html#pid19506" target="_blank" rel="noopener" class="mycode_url"> How to instalԼ EmꞴarcadero ЯAD StuĐio 12.1 AtԨens ArꞆhitect V€rsion 29.0.51961.7529 U</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3855-post-19507.html#pid19507" target="_blank" rel="noopener" class="mycode_url"> TutoЯial Ԩow instalԼ and activaԷe CLioЍ</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3859.html" target="_blank" rel="noopener" class="mycode_url">1.3 ما هو ال preprocess ؟ وما هو ال assemble ؟ وما هو ال compile ؟ وما هو ال linking؟</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3865.html" target="_blank" rel="noopener" class="mycode_url">1.4 البرنامج C++ الأول الكلاسيكي - تفسير دقيق بناء ركيزه البرمجه</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3868.html" target="_blank" rel="noopener" class="mycode_url">1.5 التجميع - Compilation - فهم التعامل مع Compiler</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3872.html" target="_blank" rel="noopener" class="mycode_url">1.6 استكشاف الlinking من الداخل بشكل عميق مع  النوعين static  و dynamic</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3880.html" target="_blank" rel="noopener" class="mycode_url">1.7 مراجعة وتمارين الفصل الأول</a><br />
</li>
</ul>
# الفصل 2 : <ul class="mycode_list"><li><a href="https://www.at4re.net/f/thread-3890.html" target="_blank" rel="noopener" class="mycode_url">2.1 الإدخال- input</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3894.html" target="_blank" rel="noopener" class="mycode_url"> 2.2 المتغيرات - variables</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3896.html" target="_blank" rel="noopener" class="mycode_url">2.3 المدخلات والنوع - Input and type</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3899.html" target="_blank" rel="noopener" class="mycode_url">2.4 العمليات Operations والمشغلات operators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3905.html" target="_blank" rel="noopener" class="mycode_url">2.5 الAssignment والInitialization</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3906-post-19645.html" target="_blank" rel="noopener" class="mycode_url">2.6 تمرين عملي - اكتشاف الكلمات المتكررة</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3907.html" target="_blank" rel="noopener" class="mycode_url">2.7 العمليات المركبة للoperators</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-3925.html" target="_blank" rel="noopener" class="mycode_url">إنشاء برامج x86 أو x64 باستخدام MinGW وCLion</a><br />
</li>
<li><a href="https://www.at4re.net/f/thread-4024.html" target="_blank" rel="noopener" class="mycode_url">2.8 أسماء في C++ - Names</a><br />
</li>
<li>2.9 أنواع وكائنات - Types and objects<br />
</li>
</ul>
<div style="text-align: center;" class="mycode_align"><iframe width="560" height="315" src="//www.youtube-nocookie.com/embed/QN97CDOEh8k" frameborder="0" allowfullscreen="true"></iframe></div>
<br />
<br />
أنواع وكائنات - Types and objects<br />
<br />
مفهوم النوع مركزي في C++ ومعظم لغات البرمجة الأخرى. <br />
دعونا نلقي نظرة أقرب وأكثر تقنية على الأنواع:<br />
• يعرف النوع type مجموعة من القيم الممكنة ومجموعة من العمليات (لكائن).<br />
• A type defines a set of possible values and a set of operations (for an object).<br />
• الكائن هو بعض الذاكرة التي تحمل قيمة من نوع معين.<br />
• An object is some memory that holds a value of a given type.<br />
• القيمة هي مجموعة من البتات في الذاكرة يتم تفسيرها وفقًا لنوع.<br />
• A value is a set of bits in memory interpreted according to a type.<br />
• المتغير هو كائن مسمى.<br />
• A variable is a named object.<br />
• الإعلان هو بيان يُعطي اسمًا ونوعًا لكائن.<br />
• A declaration is a statement that gives a name and a type to an object.<br />
• التعريف هو إعلان يحجز ذاكرة لكائن.<br />
• A definition is a declaration that sets aside memory for an object.<br />
<br />
بشكل غير رسمي، نعتقد بأن الكائن هو صندوق يمكننا وضع قيم من نوع معين فيه. يمكن لصندوق int أن يحمل أعدادًا صحيحة، مثل 7، 42، و -399. يمكن لصندوق السلسلة أن يحمل قيم سلسلة حرفية، مثل<br />
<br />
"Interoperability", "operators: +−∗/%", و "Old man had a farm".<br />
<br />
<br />
بصورة رسومية، يمكننا التفكير في ذلك بهذه الطريقة:<br />
<br />
<br />
int a = 7; <br />
تعريف متغير صحيح a يحتوي على الرقم 7:<br />
<br />
int b = 9;<br />
تعريف متغير صحيح b يحتوي على الرقم 9:<br />
<br />
char c = ’a’;<br />
تعريف متغير حرفي c يحتوي على الحرف 'a':<br />
<br />
double x = 1.2;<br />
تعريف متغير عشري x يحتوي على الرقم 1.2:<br />
<br />
string s1 = "Hello, World!";<br />
تعريف متغير سلسلة s1 يحتوي على السلسلة "Hello, World!":<br />
<br />
string s2 = "1.2";<br />
تعريف متغير سلسلة s2 يحتوي على السلسلة "1.2":<br />
<br />
<br />
<br />
تمثيل السلسلة أكثر تعقيدًا قليلاً من ذلك للعدد الصحيح لأن السلسلة تتتبع عدد الأحرف التي تحتوي عليها. <br />
لاحظ أن النوع double يخزن العدد بينما تخزن السلسلة الأحرف. <br />
على سبيل المثال، يخزن x العدد 1.2، بينما تخزن s2 الأحرف الثلاث '1'، '.'، و '2'.<br />
لا يتم تخزين علامات التنصيص للحرف والسلسلة بصورة فعلية.<br />
كل int هو من نفس الحجم؛ أي أن المترجم يحجز نفس الكمية الثابتة من الذاكرة لكل int. <br />
على جهاز كمبيوتر معتاد أو هاتف ذكي، تكون هذه الكمية 4 بايت (32 بت).<br />
بالمثل، bools، chars، و doubles لها أحجام ثابتة. <br />
<br />
عادةً ما ستجد أن الكمبيوتر يستخدم بايتًا (8 بت) لل bool أو ال char و 8 بايت لل double. <br />
لاحظ أن أنواع الكائنات المختلفة تستغرق كميات مختلفة من المساحة.<br />
وبشكل خاص، يستغرق char مساحة أقل من int، وتختلف السلسلة عن ال double و int و char في أن السلاسل المختلفة قد تستغرق كميات مختلفة من المساحة.<br />
المعنى الذي تحمله البتات في الذاكرة يعتمد تمامًا على النوع المستخدم للوصول إليها.<br />
<br />
فكر في ذلك بهذه الطريقة:<br />
الذاكرة الكمبيوترية لا تعرف عن أنواعنا؛ إنها مجرد ذاكرة. <br />
تحصل البتات في الذاكرة على معنى فقط عندما نقرر كيفية تفسير تلك الذاكرة. <br />
هذا مشابه لما نفعله كل يوم عند استخدام الأرقام.<br />
ما معنى 12.5؟ لا نعرف. <br />
يمكن أن يكون 12.5 دولار، 12.5 سنتيمتر، أو 12.5 جالون.<br />
فقط عندما نحدد الوحدة يكون التعبير 12.5 له معنى. <br />
<br />
على سبيل المثال، نفس البتات في الذاكرة التي تمثل القيمة الصحيحة 120 عند النظر إليها على أنها int ستكون الحرف 'x' عند النظر إليها ك char. <br />
إذا تم النظر إليها كسلسلة، فلن يكون لها معنى على الإطلاق وستصبح خطأ تشغيل إذا حاولنا استخدامها.<br />
يمكننا توضيح ذلك بصورة رسومية بهذه الطريقة، باستخدام 1 و 0 للإشارة إلى قيمة البتات في الذاكرة:<br />
00000000 00000000 00000000 01111000<br />
<br />
هذا هو تعيين البتات لمنطقة من الذاكرة (كلمة) يمكن قراءتها على أنها int (120) أو ك char ('x'، عند النظر إلى آخر 8 بت فقط). <br />
البت هو وحدة من ذاكرة الكمبيوتر التي يمكن أن تحتوي على القيمة 0 أو 1.<br />
<br />
<br />
 <img src="https://www.at4re.net/f/images/smilies/nice.gif" alt="nice" title="nice" class="smilie smilie_33" />]]></content:encoded>
		</item>
	</channel>
</rss>