<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>zoey-on-github.github.io</title>
  <subtitle>Browse aymeric&#39;s, an independent, searchable archive of readable snapshots from followed feeds, preserved in Git with aggr.</subtitle>
  <id>https://aggr.aymericbeaumet.com/sources/zoey-on-github.github.io/</id>
  <link rel="alternate" type="text/html" href="https://aggr.aymericbeaumet.com/sources/zoey-on-github.github.io/"/>
  <link rel="self" type="application/atom+xml" href="https://aggr.aymericbeaumet.com/sources/zoey-on-github.github.io/atom.xml"/>
  <updated>2026-10-22T06:45:58+00:00</updated>
  <author>
    <name>aymeric&#39;s</name>
  </author>
  <generator version="2.0.0" uri="https://github.com/aymericbeaumet/aggr">aggr</generator>
  <entry>
    <id>urn:aggr:item:e1679bbfa4fc09220a489bf6f1b87d1fd0fc454d</id>
    <title type="text">examining the macOS gcc binary</title>
    <link rel="alternate" type="text/html" href="https://aggr.aymericbeaumet.com/items/lobste-rs/2026-10-22-examining-the-macos-gcc-binary/"/>
    <link rel="via" type="text/html" href="https://zoey-on-github.github.io/blog/macgcc.html"/>
    <published>2026-10-22T06:45:58+00:00</published>
    <updated>2026-10-22T06:45:58+00:00</updated>
    <author>
      <name>zoey-on-github.github.io by juliethefoxcoon</name>
    </author>
    <category term="news"/>
    <category term="mac"/>
    <category term="reversing"/>
    <source>
      <title>Lobsters: Top Stories of the Past Week</title>
    </source>
    <summary type="text">Comments</summary>
    <content type="html">&lt;p&gt;if you’ve ever written C(or c++) on a mac, you’ll know that the so-called &lt;code&gt;gcc&lt;/code&gt; is just clang in disguise&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot; data-language=&quot;Shell&quot;&gt;&lt;span class=&quot;syntax-source syntax-shell syntax-bash&quot;&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-shell&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-shell&quot;&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-arguments syntax-shell&quot;&gt; gcc&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-function-call syntax-shell&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-shell&quot;&gt;clang:&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-arguments syntax-shell&quot;&gt; error: no input files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;most people(fairly) assume that this is just an alias, but this is not true! it’s a binary!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot; data-language=&quot;Shell&quot;&gt;&lt;span class=&quot;syntax-source syntax-shell syntax-bash&quot;&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-shell&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-shell&quot;&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-arguments syntax-shell&quot;&gt; which gcc&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-function-call syntax-shell&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-shell&quot;&gt;/usr/bin/gcc&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;now, what &lt;em&gt;is&lt;/em&gt; this binary? i naively assumed that it would just be shelling out to &lt;code&gt;clang&lt;/code&gt; but it turns out the answer is more interesting than that.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot; data-language=&quot;CSS&quot;&gt;&lt;span class=&quot;syntax-source syntax-css&quot;&gt;&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;int sub_1000006c4(int arg0, int arg1&lt;/span&gt;) &lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;19 = &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;arg&lt;/span&gt;1;
    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;20 = &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;arg&lt;/span&gt;0;
    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;once&lt;/span&gt; == &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;-&lt;/span&gt;0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;1) {
            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (*(&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;int&lt;/span&gt;8_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;t&lt;/span&gt; *)*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt; == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;63 &amp;amp;&amp;amp; *(&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;int&lt;/span&gt;8_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;t&lt;/span&gt; *)(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt; + 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;1) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;63 &amp;amp;&amp;amp; *(&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;int&lt;/span&gt;8_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;t&lt;/span&gt; *)(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt; + 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;2) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;&amp;quot;;
&lt;/span&gt;            &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;            else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;llvm-gcc&lt;/span&gt;&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;&amp;quot;;
&lt;/span&gt;                    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                    else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = *_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;;
                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;c&lt;/span&gt;++&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0 || &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;llvm-g&lt;/span&gt;++&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;++&amp;quot;;
&lt;/span&gt;                            &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
                    }
            }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;            xcselect_invoke_xcrun(&lt;/span&gt;);
    }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    while (true&lt;/span&gt;) &lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;dispatch&lt;/span&gt;_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;once&lt;/span&gt;(_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;once&lt;/span&gt;, ___&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;block&lt;/span&gt;_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;literal&lt;/span&gt;_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;global&lt;/span&gt;);
            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (*(&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;int&lt;/span&gt;8_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;t&lt;/span&gt; *)*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt; == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;63) {
                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (*(&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;int&lt;/span&gt;8_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;t&lt;/span&gt; *)(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt; + 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;1) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;63) {
                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (*(&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;int&lt;/span&gt;8_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;t&lt;/span&gt; *)(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt; + 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;2) != 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;llvm-gcc&lt;/span&gt;&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;&amp;quot;;
&lt;/span&gt;                                    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                                    else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;c&lt;/span&gt;++&amp;quot;) != 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = *_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;;
                                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;llvm-g&lt;/span&gt;++&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;++&amp;quot;;
&lt;/span&gt;                                                    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
                                            }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                                            else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;++&amp;quot;;
&lt;/span&gt;                                            &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
                                    }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                                    xcselect_invoke_xcrun(&lt;/span&gt;);
                            }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                            else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xcselect&lt;/span&gt;_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;invoke&lt;/span&gt;_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xcrun&lt;/span&gt;();
&lt;/span&gt;                            &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
                    }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                    else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;llvm-gcc&lt;/span&gt;&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;&amp;quot;;
&lt;/span&gt;                            &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                            else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;c&lt;/span&gt;++&amp;quot;) != 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = *_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;;
                                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;llvm-g&lt;/span&gt;++&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;++&amp;quot;;
&lt;/span&gt;                                            &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
                                    }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                                    else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;++&amp;quot;;
&lt;/span&gt;                                    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
                            }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                            xcselect_invoke_xcrun(&lt;/span&gt;);
                    }
            }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;            else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;llvm-gcc&lt;/span&gt;&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;&amp;quot;;
&lt;/span&gt;                    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                    else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;c&lt;/span&gt;++&amp;quot;) != 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = *_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;;
                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;strcmp&lt;/span&gt;(*_&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;main&lt;/span&gt;E&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;xecutable&lt;/span&gt;T&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;.&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;tool&lt;/span&gt;N&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ame&lt;/span&gt;, &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;llvm-g&lt;/span&gt;++&amp;quot;) == 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;0) {
                                            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;++&amp;quot;;
&lt;/span&gt;                                    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
                            }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                            else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
                                    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;++&amp;quot;;
&lt;/span&gt;                            &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
                    }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;                    xcselect_invoke_xcrun(&lt;/span&gt;);
            }
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;            continue;
    }
}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;there’s some interesting stuff here(for example special logic for checking if it’s being run as c++ or llvm-gcc specifically), but the key thing we’re interested in is this line of code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot;&gt;xcselect_invoke_xcrun()
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;this is a function from libxcselect.dylib, but it’s basically the same thing as running &lt;code&gt;xcrun&lt;/code&gt;.(fun fact: &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://zoey-on-github.github.io/blog/images/Screenshot_2026-10-21_at_11.38.00_PM.png&quot;&gt;the xcrun binary basically just calls this function&lt;/a&gt;) &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://zoey-on-github.github.io/blog/images/Screenshot_2026-10-21_at_12.57.05_PM.png&quot;&gt;if you disassemble any xcode-installed developer tool, you’ll see this exact same binary&lt;/a&gt;,meaning all the developer tools that xcode-select installs on macOS are actually just being run through xcrun.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn-1&quot; id=&quot;fnref-1&quot; data-footnote-ref&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;br /&gt;
but that raises the important question: what does xcrun &lt;em&gt;do&lt;/em&gt;? i’ve certainly never heard of it before this.&lt;br /&gt;
well, checking &lt;a target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://keith.github.io/xcode-man-pages/xcrun.1.html&quot;&gt;the manpage&lt;/a&gt; we can see that it calls developer tools from the developer tool directory. this gives us an important bit of info: the location of the &lt;em&gt;actual&lt;/em&gt; gcc binary that’s being called. thankfully for us, there is a &lt;code&gt;--find&lt;/code&gt; command that can give us exactly this.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot; data-language=&quot;Shell&quot;&gt;&lt;span class=&quot;syntax-source syntax-shell syntax-bash&quot;&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-shell&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-shell&quot;&gt;$&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-function-call syntax-arguments syntax-shell&quot;&gt; xcrun&lt;span class=&quot;syntax-variable syntax-parameter syntax-option syntax-shell&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-parameter syntax-shell&quot;&gt; --&lt;/span&gt;find&lt;/span&gt; gcc&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-function-call syntax-shell&quot;&gt;&lt;span class=&quot;syntax-variable syntax-function syntax-shell&quot;&gt;/Library/Developer/CommandLineTools/usr/bin/gcc&lt;/span&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;looking in this directory, we can see that:&lt;br /&gt;
c++, llvm-gcc, llvm-g++ aren’t in this directory, that’s why they’re hardcoded into the binary itself&lt;br /&gt;
cc and clang++ are just alises to clang&lt;br /&gt;
&lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://zoey-on-github.github.io/blog/images/Screenshot_2026-10-21_at_1.11.00_PM.png&quot; alt=&quot;&quot; loading=&quot;eager&quot; decoding=&quot;async&quot; fetchpriority=&quot;high&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt; &lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://zoey-on-github.github.io/blog/images/Screenshot_2026-10-21_at_1.11.10_PM.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;low&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt;&lt;br /&gt;
but most interestingly, g++ is an alias to an actual gcc binary that’s in the same directory:&lt;br /&gt;
&lt;picture class=&quot;article-picture article-picture-fallback&quot; style=&quot;--image-ratio:16 / 9&quot;&gt;&lt;img src=&quot;https://zoey-on-github.github.io/blog/images/Screenshot_2026-10-21_at_11.54.47_PM.png&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; fetchpriority=&quot;low&quot; referrerpolicy=&quot;no-referrer&quot; class=&quot;progressive-image&quot;&gt;&lt;/picture&gt;&lt;br /&gt;
well, what does &lt;em&gt;that&lt;/em&gt; gcc binary do, then?&lt;br /&gt;
opening it in my disassembler, we see that it… shells out to xcrun and calls clang(or clang++ depending on how it’s called)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;code-snippet&quot; data-language=&quot;CSS&quot;&gt;&lt;span class=&quot;syntax-source syntax-css&quot;&gt;&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;int EntryPoint(int arg0, int arg1&lt;/span&gt;) &lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;22 = &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;arg&lt;/span&gt;1;
    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;21 = &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;arg&lt;/span&gt;0;
    &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;asm&lt;/span&gt; { &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;sbfiz&lt;/span&gt;      &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;8, &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;21, #0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;3, #0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;20&lt;/span&gt; &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    r0 = malloc(r8 &lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;+&lt;/span&gt; 0x10&lt;/span&gt;);
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    if (r0 == 0x0&lt;/span&gt;) &lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;err&lt;/span&gt;(0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;47, &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;1);
&lt;/span&gt;    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    r19 = r0;
    &lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-wildcard syntax-css&quot;&gt;*&lt;/span&gt;r0 = &amp;quot;&lt;/span&gt;/&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;usr&lt;/span&gt;/&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;bin&lt;/span&gt;/&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;xcrun&amp;quot;;
    r23 = &lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-wildcard syntax-css&quot;&gt;*&lt;/span&gt;r22;
    r0 = strlen(r23&lt;/span&gt;);
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    if (&lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-wildcard syntax-css&quot;&gt;*&lt;/span&gt;(int8_t &lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-wildcard syntax-css&quot;&gt;*&lt;/span&gt;&lt;/span&gt;)(&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;r23 &lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;+&lt;/span&gt; (r0 - 0x1 &amp;lt;&amp;lt; r64&lt;/span&gt;)) == 0&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;x2b &amp;amp;&amp;amp; &lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-wildcard syntax-css&quot;&gt;*&lt;/span&gt;(int8_t &lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-wildcard syntax-css&quot;&gt;*&lt;/span&gt;&lt;/span&gt;)(&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;r23 &lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;+&lt;/span&gt; (r0 - 0x2 &amp;lt;&amp;lt; r64&lt;/span&gt;)) == 0&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;x2b&lt;/span&gt;) &lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;8 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;++&amp;quot;;
&lt;/span&gt;    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;8 = &amp;quot;&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;clang&lt;/span&gt;&amp;quot;;
&lt;/span&gt;    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    r19&lt;span class=&quot;syntax-meta syntax-attribute-selector syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-entity syntax-css&quot;&gt;[&lt;/span&gt;0&lt;span class=&quot;syntax-entity syntax-other syntax-attribute-name syntax-css&quot;&gt;x1&lt;/span&gt;&lt;span class=&quot;syntax-punctuation syntax-definition syntax-entity syntax-css&quot;&gt;]&lt;/span&gt;&lt;/span&gt; = r8;
    if (r21 &lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;&amp;gt;&lt;/span&gt;= 0x2&lt;/span&gt;) &lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;asm&lt;/span&gt; { &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;ubfiz&lt;/span&gt;      &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;2, &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;8, #0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;3, #0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;20&lt;/span&gt; &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;            memcpy(r19 &lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;+&lt;/span&gt; 0x10, r22 &lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;+&lt;/span&gt; 0x8, r2&lt;/span&gt;);
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;            r8 = r21;
    }
    else &lt;/span&gt;&lt;span class=&quot;syntax-meta syntax-property-list syntax-css&quot;&gt;&lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;r&lt;/span&gt;8 = 0&lt;span class=&quot;syntax-meta syntax-property-name syntax-css&quot;&gt;x&lt;/span&gt;1;
&lt;/span&gt;    &lt;span class=&quot;syntax-punctuation syntax-section syntax-property-list syntax-css&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    &lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-wildcard syntax-css&quot;&gt;*&lt;/span&gt;(r19 &lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;+&lt;/span&gt; r8 &lt;span class=&quot;syntax-entity syntax-name syntax-tag syntax-wildcard syntax-css&quot;&gt;*&lt;/span&gt; 0x8 &lt;span class=&quot;syntax-punctuation syntax-separator syntax-combinator syntax-css&quot;&gt;+&lt;/span&gt; 0x8&lt;/span&gt;) = 0&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;x0;
    r0 = execv(&amp;quot;&lt;/span&gt;/&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;usr&lt;/span&gt;/&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;bin&lt;/span&gt;/&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;xcrun&amp;quot;, r19&lt;/span&gt;);
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    err(0x47, r1&lt;/span&gt;);
&lt;span class=&quot;syntax-meta syntax-selector syntax-css&quot;&gt;    return r0;
}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;section class=&quot;footnotes&quot; data-footnotes&gt;
&lt;ol&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;if you’re wondering &lt;em&gt;why&lt;/em&gt; this is, my guess is because of SIP. /usr/bin is a protected directory on macOS and i assume apple can’t update it without requiring a restart, and you can update the xcode tools without having to restart your mac. as for why they dont just add the developer tools directory to path, my guess is that they want the freedom to change this directory whenever they want &lt;a href=&quot;#fnref-1&quot; class=&quot;footnote-backref&quot; data-footnote-backref data-footnote-backref-idx=&quot;1&quot; aria-label=&quot;Back to reference 1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
</feed>
