<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>El hilo del laberinto (Publicaciones sobre Depuración)</title><link>https://blog.jcea.es/</link><description></description><atom:link href="https://blog.jcea.es/categories/depuracion.xml" rel="self" type="application/rss+xml"></atom:link><language>es</language><lastBuildDate>Sat, 11 Jul 2026 17:53:32 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Python 3.13: zlib.error: Error -2 while flushing: inconsistent stream state</title><link>https://blog.jcea.es/posts/20241229-python3_13-gzip.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Tras actualizar a &lt;a class="reference external" href="https://www.python.org/downloads/release/python-3130/"&gt;Python 3.13&lt;/a&gt; y
&lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt;, tal y como se describe en
&lt;a class="reference external" href="https://blog.jcea.es/posts/20241012-mod_wsgi_python3_13.html"&gt;Problema actualizando mis servicios WSGI a Python 3.13&lt;/a&gt;, empecé a ver estos errores en
el &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Log_(inform%C3%A1tica)"&gt;log&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Exception ignored in: &amp;lt;gzip on 0x7fd58e3c6fb0&amp;gt;
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/gzip.py", line 373, in close
    fileobj.write(self.compress.flush())
zlib.error: Error -2 while flushing: inconsistent stream state
&lt;/pre&gt;
&lt;p&gt;La &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt; no parece tener ningún efecto práctico en el
programa, pero muestra que hay un problema a resolver.&lt;/p&gt;
&lt;p&gt;Lo primero que llama la atención es que el &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Stack_trace"&gt;traceback&lt;/a&gt; no parece
completo, no indica qué código está llamando a la función
&lt;span class="kbd"&gt;close()&lt;/span&gt;. Ese detalle junto al mensaje &lt;span class="kbd"&gt;Exception
ignored in:&lt;/span&gt; indica que se trata de una &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt; asíncrona que
ocurre en un &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Destructor_(inform%C3%A1tica)"&gt;destructor&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Para saber qué parte del código está generando esa &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt; (de
forma asíncrona), podemos modificar el código añadiendo esto al
principio:&lt;/p&gt;
&lt;table class="codetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-1"&gt; 1&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-2"&gt; 2&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-3"&gt; 3&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-4"&gt; 4&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-5"&gt; 5&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-6"&gt; 6&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-7"&gt; 7&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-8"&gt; 8&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-9"&gt; 9&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-10"&gt;10&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-11"&gt;11&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-12"&gt;12&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-13"&gt;13&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-14"&gt;14&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-15"&gt;15&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-16"&gt;16&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html#rest_code_38a77e47e7da4052afa0d16d62dd9986-17"&gt;17&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="code python"&gt;&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-1"&gt;&lt;/a&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;inspect&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-2"&gt;&lt;/a&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;GzipFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GzipFile&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-3"&gt;&lt;/a&gt;     &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-4"&gt;&lt;/a&gt;         &lt;span class="n"&gt;creador&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-5"&gt;&lt;/a&gt;         &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_creador&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creador&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;creador&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;creador&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lineno&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-6"&gt;&lt;/a&gt;         &lt;span class="k"&gt;del&lt;/span&gt; &lt;span class="n"&gt;creador&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-7"&gt;&lt;/a&gt;         &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-8"&gt;&lt;/a&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-9"&gt;&lt;/a&gt;     &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-10"&gt;&lt;/a&gt;         &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-11"&gt;&lt;/a&gt;             &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"CLOSE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-12"&gt;&lt;/a&gt;             &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;super&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-13"&gt;&lt;/a&gt;         &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;exc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-14"&gt;&lt;/a&gt;             &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_creador&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-15"&gt;&lt;/a&gt;             &lt;span class="k"&gt;raise&lt;/span&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-16"&gt;&lt;/a&gt;
&lt;a name="rest_code_38a77e47e7da4052afa0d16d62dd9986-17"&gt;&lt;/a&gt; &lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GzipFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GzipFile&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20241229-python3_13-gzip.html"&gt;Leer más…&lt;/a&gt; (quedan 6 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Actualización</category><category>Bugs</category><category>Depuración</category><category>mod_wsgi</category><category>Python</category><guid>https://blog.jcea.es/posts/20241229-python3_13-gzip.html</guid><pubDate>Sun, 29 Dec 2024 09:32:00 GMT</pubDate></item><item><title>Problema actualizando mis servicios WSGI a Python 3.13</title><link>https://blog.jcea.es/posts/20241012-mod_wsgi_python3_13.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Acaba de salir &lt;a class="reference external" href="https://www.python.org/downloads/release/python-3130/"&gt;Python 3.13&lt;/a&gt; y, como
siempre, actualizo mi código y servicios a esta nueva versión.
Actualizo rápido para aprovechar las mejoras de la nueva versión
de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt; y porque acumular actualizaciones pendientes supone que
el coste de migrar va creciendo cada año.&lt;/p&gt;
&lt;p&gt;Normalmente los cambios necesarios son mínimos, pero en esta
ocasión tengo problemas con mis servicios &lt;a class="reference external" href="https://es.wikipedia.org/wiki/WSGI"&gt;WSGI&lt;/a&gt; a través del
módulo &lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Los servicios en sí parecen funcionar correctamente, pero los
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Log_(inform%C3%A1tica)"&gt;logs&lt;/a&gt; se saturan de cientos de líneas por segundo con el siguiente
error:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Exception ignored in: &amp;lt;_io.TextIOWrapper name='&amp;lt;wsgi.errors&amp;gt;' encoding='utf-8'&amp;gt;
RuntimeError: log object has expired
&lt;/pre&gt;
&lt;p&gt;Viendo el código fuente de &lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt; y del propio &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Int%C3%A9rprete_(inform%C3%A1tica)"&gt;intérprete&lt;/a&gt; de
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt;, esto ocurre cuando se escribe en el &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Log_(inform%C3%A1tica)"&gt;log&lt;/a&gt; (o se hace
&lt;em&gt;flush&lt;/em&gt;) una vez que ya se ha llamado a &lt;strong&gt;close&lt;/strong&gt;. La parte de
&lt;strong&gt;Exception ignored&lt;/strong&gt; está dentro del &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Int%C3%A9rprete_(inform%C3%A1tica)"&gt;intérprete&lt;/a&gt; de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt;,
cuando se intenta escribir en un fichero que no puede dar una
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt;. Por ejemplo, cuando un &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Destructor_(inform%C3%A1tica)"&gt;destructor&lt;/a&gt; levanta una
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Manejo_de_excepciones"&gt;excepción&lt;/a&gt; o durante la &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)"&gt;recogida de basuras&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aunque todo parece ir bien, de momento seguiré con &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Python"&gt;Python&lt;/a&gt; 3.12,
mientras investigo el problema en detalle. Ahora mismo estoy
bastante ocupado...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20241015:&lt;/strong&gt; Alguien se me ha adelantado informando del problema:
&lt;a class="reference external" href="https://github.com/GrahamDumpleton/mod_wsgi/issues/912"&gt;RuntimeError: log object has expired in mod_wsgi 5.0.1 with
Django 5.0.9 python 3.13.0 #912&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20241122:&lt;/strong&gt; Se publica la versión 5.0.2 de &lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt; que,
aparentemente, soluciona este problema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;20250125:&lt;/strong&gt; Encuentro un rato para actualizar mis servicios
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/WSGI"&gt;WSGI&lt;/a&gt; a la nueva versión de &lt;a class="reference external" href="https://modwsgi.readthedocs.io/en/master/"&gt;mod_wsgi&lt;/a&gt; y confirmo que el problema
se ha solucionado.&lt;/p&gt;&lt;/div&gt;</description><category>Actualización</category><category>Bugs</category><category>Depuración</category><category>mod_wsgi</category><category>Python</category><guid>https://blog.jcea.es/posts/20241012-mod_wsgi_python3_13.html</guid><pubDate>Sat, 12 Oct 2024 00:00:00 GMT</pubDate></item><item><title>SmartOS: Stock "mkvtoolnix" crashes on 2023.4.0 with locale error</title><link>https://blog.jcea.es/posts/20240813-mkvtoolnix_locale.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;This post transcribes some emails I sent to the &lt;a class="reference external" href="https://smartos.topicbox.com/groups/smartos-discuss"&gt;SmartOS mailing
list&lt;/a&gt; some
time ago. You can check the &lt;a class="reference external" href="https://smartos.topicbox.com/groups/smartos-discuss/T16289ae73cd17a35/stock-mkvtoolnix-crashes-on-2023-4-0-with-locale-error"&gt;original thread&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Message-ID: &amp;lt;15dec164-940e-17d7-a7db-dcdf19f9ec2d@jcea.es&amp;gt;
Date: Tue, 12 Mar 2024 14:07:13 +0100
To: smartos-discuss &amp;lt;smartos-discuss@lists.smartos.org&amp;gt;
From: Jesus Cea &amp;lt;jcea@jcea.es&amp;gt;
List-Id: "smartos-discuss" &amp;lt;smartos-discuss.lists.smartos.org&amp;gt;
Subject: [smartos-discuss] Stock "mkvtoolnix" crashes on 2023.4.0 with locale
  error

Hi, there.

I install "pkgin install mkvtoolnix" with no issues (but a huge number
of dependencies, 1.6 Gigabytes total!).

Then, I run "mkvmerge" and it crashes:

"""
[jcea@test ~]$ mkvmerge
terminate called after throwing an instance of 'std::runtime_error'
what():  locale::facet::_S_create_c_locale name not valid
Abort (core dumped)
"""

This worked fine in 2022.4.0.

My environment variables are:

"""
MANPATH=/opt/local/man:/usr/share/man:/opt/local/lib/perl5/man:/opt/local/lib/perl5/vendor_perl/man
LC_MONETARY=es_ES.UTF-8
TERM=xterm
SHELL=/usr/bin/bash
SSH_CLIENT=***
LC_NUMERIC=es_ES.UTF-8
SSH_TTY=/dev/pts/26
USER=root
COLUMNS=80
PAGER=less
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/opt/local/sbin:/opt/local/bin:/usr/sbin:/usr/bin:/sbin
LC_COLLATE=es_ES.UTF-8
PWD=/home/jcea
LANG=en_US.UTF-8
TZ=Europe/Madrid
LINES=25
SHLVL=1
HOME=/home/jcea
TERMINFO=/opt/local/share/lib/terminfo
LOGNAME=jcea
SSH_CONNECTION=****
LC_TIME=es_ES.UTF-8
FTPMODE=auto
_=/opt/local/bin/env
"""
&lt;/pre&gt;
&lt;p&gt;Jonathan Perkin replied:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20240813-mkvtoolnix_locale.html"&gt;Leer más…&lt;/a&gt; (quedan 11 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Bugs</category><category>C</category><category>Código Fuente</category><category>Depuración</category><category>English</category><category>Illumos</category><category>Matroska</category><category>pkgsrc</category><category>Sistemas Operativos</category><category>SmartOS</category><guid>https://blog.jcea.es/posts/20240813-mkvtoolnix_locale.html</guid><pubDate>Tue, 13 Aug 2024 21:57:00 GMT</pubDate></item><item><title>Los peligros de volcar a "pickle" cualquier cosa</title><link>https://blog.jcea.es/posts/20240416-pickle.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;En &lt;a class="reference external" href="https://blog.jcea.es/posts/20191011-slashdot.html"&gt;Generar un email diario a partir de un feed RSS (Slashdot)&lt;/a&gt; y
&lt;a class="reference external" href="https://blog.jcea.es/posts/20200330-slashdot.html"&gt;Mejoras a la hora de generar un email diario a partir de un feed RSS (Slashdot)&lt;/a&gt; describo un programa para enviar por
email las novedades diarias de un &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Rss"&gt;&lt;em&gt;feed&lt;/em&gt; RSS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aunque al programa le vendría bien una reescritura, todo fue bien
hasta hace unos días, cuando el programa falló con un error
indicando que no se podía recuperar el estado volcado con &lt;a class="reference external" href="https://docs.python.org/3/library/pickle.html"&gt;pickle&lt;/a&gt;
debido a una dependencia (inesperada e inadvertida) con
&lt;a class="reference external" href="https://pypi.org/project/beautifulsoup4/"&gt;beautifulsoup4&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;El error en sí era críptico y poco claro, pero ocurrió tras haber
actualizado la &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Biblioteca_(inform%C3%A1tica)"&gt;biblioteca&lt;/a&gt; &lt;a class="reference external" href="https://pypi.org/project/beautifulsoup4/"&gt;beautifulsoup4&lt;/a&gt;. Esto fue una pista
crucial. Obviamente todo volvió a la normalidad tras instalar una
versión previa y así siguió cumpliendo con su trabajo unos días
hasta que encontré tiempo para echarle un vistazo. La
actualización de &lt;a class="reference external" href="https://pypi.org/project/beautifulsoup4/"&gt;beautifulsoup4&lt;/a&gt; no era urgente y pude aplazar la
investigación hasta que me vino bien.&lt;/p&gt;
&lt;p&gt;Una vez metido en faena quedó claro que el problema era que la
estructura interna de &lt;a class="reference external" href="https://pypi.org/project/beautifulsoup4/"&gt;beautifulsoup4&lt;/a&gt; había cambiado y los objetos
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Serializaci%C3%B3n"&gt;serializados&lt;/a&gt; de la versión anterior de &lt;a class="reference external" href="https://pypi.org/project/beautifulsoup4/"&gt;beautifulsoup4&lt;/a&gt; no podían
cargarse en la versión actual de la &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Biblioteca_(inform%C3%A1tica)"&gt;biblioteca&lt;/a&gt;. Esto no es
ninguna sorpresa, es lo normal. La sorpresa es que estuviera
serializando objetos &lt;a class="reference external" href="https://pypi.org/project/beautifulsoup4/"&gt;beautifulsoup4&lt;/a&gt; de forma inadvertida.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20240416-pickle.html"&gt;Leer más…&lt;/a&gt; (quedan 2 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Código Fuente</category><category>Depuración</category><category>Python</category><category>Serialización</category><category>Slashdot</category><guid>https://blog.jcea.es/posts/20240416-pickle.html</guid><pubDate>Tue, 16 Apr 2024 20:46:00 GMT</pubDate></item><item><title>SmartOS: Serious issue with openjdk 17 and TLS</title><link>https://blog.jcea.es/posts/20231231-bug_openjdk17_and_tls.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;This post transcribes some emails I sent to several mailing lists:&lt;/p&gt;
&lt;p&gt;The initial email was sent to the &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Apache_Kafka"&gt;Kafka&lt;/a&gt; &lt;a class="reference external" href="https://lists.apache.org/list.html?users@kafka.apache.org"&gt;User mailing list&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Reply-To: users@kafka.apache.org
Message-ID: &amp;lt;92aa6286-d875-04ed-6205-9e4a8fe3a1a1@jcea.es&amp;gt;
Date: Thu, 9 Nov 2023 03:37:39 +0100
To: users@kafka.apache.org
From: Jesus Cea &amp;lt;jcea@jcea.es&amp;gt;
Subject: How to get a X509 broker certificate with "openssl s_client"?

I am trying to remotely access to the brokers certificates (for audit
purposes, expiration alarms, etc) using this command:

"""
openssl s_client -showcerts -connect localhost:9092
"""

The connection is correctly established, but something is wrong. The TLS
session is has some errors at the beginning, but it success at the end:

"""
[jcea@Kafka ~]$ openssl s_client -showcerts -connect localhost:9092
CONNECTED(00000004)
1:error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad
record mac:ssl/record/ssl3_record.c:676:
---
no peer certificate available
---
No client certificate CA names sent
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1696 bytes and written 300 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
"""

I tried too writing a tiny TLS client in Python, same result, raising
this exception: "ssl.SSLError: [SSL:
DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac
(_ssl.c:992)".

I guess there is some kind of preamble before TLS negotiation.

Is that documented somewhere?. How can I check remotely the brokers'
certificates?

Thanks.
&lt;/pre&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20231231-bug_openjdk17_and_tls.html"&gt;Leer más…&lt;/a&gt; (quedan 6 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>Bugs</category><category>Criptología</category><category>Depuración</category><category>English</category><category>Java</category><category>Kafka</category><category>openjdk</category><category>pkgsrc</category><category>Seguridad</category><category>SmartOS</category><category>TLS</category><guid>https://blog.jcea.es/posts/20231231-bug_openjdk17_and_tls.html</guid><pubDate>Sun, 31 Dec 2023 15:34:00 GMT</pubDate></item><item><title>Cómo saber el tamaño de una función en Código Objeto</title><link>https://blog.jcea.es/posts/20221231-size_function.html</link><dc:creator>Jesús Cea Avión</dc:creator><description>&lt;div&gt;&lt;p&gt;Por motivos complicados necesitaba conocer el tamaño de una
función en &lt;a class="reference external" href="https://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)"&gt;C&lt;/a&gt;, una vez compilada a &lt;a class="reference external" href="https://es.wikipedia.org/wiki/C%C3%B3digo_objeto"&gt;código objeto&lt;/a&gt;. A priori no
hay forma simple de saberlo.&lt;/p&gt;
&lt;p&gt;Acabé volcando el listado de funciones y sus direcciones a partir
del &lt;a class="reference external" href="https://es.wikipedia.org/wiki/C%C3%B3digo_objeto"&gt;código objeto&lt;/a&gt;, ordenando las funciones por su dirección,
buscando la dirección de la función que me interesa y buscando la
dirección de la función que la sigue. Restando ambas obtenía el
tamaño de la función.&lt;/p&gt;
&lt;p&gt;Años más tarde volví a revisar el tema. Lo que me molestaba era lo
que sigue:&lt;/p&gt;
&lt;p&gt;Tomemos el siguiente código &lt;a class="reference external" href="https://es.wikipedia.org/wiki/C_(lenguaje_de_programaci%C3%B3n)"&gt;C&lt;/a&gt;:&lt;/p&gt;
&lt;table class="codetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_e5fe8417c8dd4e7fbaca6abb9f8e3b60-1"&gt;1&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_e5fe8417c8dd4e7fbaca6abb9f8e3b60-2"&gt;2&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_e5fe8417c8dd4e7fbaca6abb9f8e3b60-3"&gt;3&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="code C"&gt;&lt;a name="rest_code_e5fe8417c8dd4e7fbaca6abb9f8e3b60-1"&gt;&lt;/a&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;a name="rest_code_e5fe8417c8dd4e7fbaca6abb9f8e3b60-2"&gt;&lt;/a&gt;     &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_e5fe8417c8dd4e7fbaca6abb9f8e3b60-3"&gt;&lt;/a&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;Si compilamos el código anterior y generamos código fuente en
&lt;a class="reference external" href="https://es.wikipedia.org/wiki/Ensamblador"&gt;ensamblador&lt;/a&gt; de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/X86"&gt;x86&lt;/a&gt; con &lt;span class="kbd"&gt;gcc -S -O9 a.c&lt;/span&gt;, vemos lo
siguiente:&lt;/p&gt;
&lt;table class="codetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-1"&gt; 1&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-2"&gt; 2&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-3"&gt; 3&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-4"&gt; 4&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-5"&gt; 5&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-6"&gt; 6&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-7"&gt; 7&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-8"&gt; 8&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-9"&gt; 9&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-10"&gt;10&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-11"&gt;11&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-12"&gt;12&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-13"&gt;13&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-14"&gt;14&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-15"&gt;15&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-16"&gt;16&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-17"&gt;17&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-18"&gt;18&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-19"&gt;19&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-20"&gt;20&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-21"&gt;21&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-22"&gt;22&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-23"&gt;23&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-24"&gt;24&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-25"&gt;25&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-26"&gt;26&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-27"&gt;27&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-28"&gt;28&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-29"&gt;29&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-30"&gt;30&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-31"&gt;31&lt;/a&gt;
&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html#rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-32"&gt;32&lt;/a&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="code gas"&gt;&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-1"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.file&lt;/span&gt;   &lt;span class="s"&gt;"a.c"&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-2"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.text&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-3"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.p2align&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-4"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.globl&lt;/span&gt;  &lt;span class="no"&gt;a&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-5"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.type&lt;/span&gt;   &lt;span class="no"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;@function&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-6"&gt;&lt;/a&gt; &lt;span class="nl"&gt;a:&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-7"&gt;&lt;/a&gt; &lt;span class="nl"&gt;.LFB0:&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-8"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.cfi_startproc&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-9"&gt;&lt;/a&gt;         &lt;span class="nf"&gt;endbr64&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-10"&gt;&lt;/a&gt;         &lt;span class="nf"&gt;leal&lt;/span&gt;    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;%rdi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;%rdi&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nv"&gt;%eax&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-11"&gt;&lt;/a&gt;         &lt;span class="nf"&gt;ret&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-12"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.cfi_endproc&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-13"&gt;&lt;/a&gt; &lt;span class="nl"&gt;.LFE0:&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-14"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.size&lt;/span&gt;   &lt;span class="no"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;.-a&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-15"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.ident&lt;/span&gt;  &lt;span class="s"&gt;"GCC: (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0"&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-16"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.section&lt;/span&gt;        &lt;span class="no"&gt;.note.GNU-stack&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;@progbits&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-17"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.section&lt;/span&gt;        &lt;span class="no"&gt;.note.gnu.property&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-18"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.align&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-19"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.long&lt;/span&gt;    &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;f&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="no"&gt;f&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-20"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.long&lt;/span&gt;    &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="no"&gt;f&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="no"&gt;f&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-21"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.long&lt;/span&gt;    &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-22"&gt;&lt;/a&gt; &lt;span class="err"&gt;0:&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-23"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.string&lt;/span&gt;  &lt;span class="s"&gt;"GNU"&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-24"&gt;&lt;/a&gt; &lt;span class="err"&gt;1:&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-25"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.align&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-26"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.long&lt;/span&gt;    &lt;span class="mi"&gt;0xc0000002&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-27"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.long&lt;/span&gt;    &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="no"&gt;f&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="no"&gt;f&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-28"&gt;&lt;/a&gt; &lt;span class="err"&gt;2:&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-29"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.long&lt;/span&gt;    &lt;span class="mi"&gt;0x3&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-30"&gt;&lt;/a&gt; &lt;span class="err"&gt;3:&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-31"&gt;&lt;/a&gt;         &lt;span class="na"&gt;.align&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
&lt;a name="rest_code_fe8fdc0dd30d4ceca7cca4895c1d9354-32"&gt;&lt;/a&gt; &lt;span class="err"&gt;4:&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;La clave del asunto es la línea 14: &lt;span class="kbd"&gt;.size a, .-a&lt;/span&gt;. Según el
&lt;a class="reference external" href="https://ftp.gnu.org/old-gnu/Manuals/gas-2.9.1/html_chapter/as_7.html#SEC123"&gt;manual&lt;/a&gt;
de &lt;a class="reference external" href="https://es.wikipedia.org/wiki/GNU_Assembler"&gt;gas&lt;/a&gt;, eso guarda como tamaño de la función &lt;span class="kbd"&gt;a&lt;/span&gt; la resta
entre la posición actual del &lt;a class="reference external" href="https://es.wikipedia.org/wiki/Ensamblador"&gt;ensamblador&lt;/a&gt; y la primera instrucción
de &lt;span class="kbd"&gt;a&lt;/span&gt;. Es decir, resta a la dirección final de la función la
dirección inicial. Es decir, obtenemos el tamaño.&lt;/p&gt;
&lt;p&gt;Aparentemente, entonces, se está generando esa información y se
guarda en el &lt;a class="reference external" href="https://es.wikipedia.org/wiki/C%C3%B3digo_objeto"&gt;código objeto&lt;/a&gt;. ¿Cómo acceder a ella?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.jcea.es/posts/20221231-size_function.html"&gt;Leer más…&lt;/a&gt; (quedan 1 minutos de lectura)&lt;/p&gt;&lt;/div&gt;</description><category>C</category><category>Código Ensamblador</category><category>Depuración</category><guid>https://blog.jcea.es/posts/20221231-size_function.html</guid><pubDate>Sat, 31 Dec 2022 19:45:00 GMT</pubDate></item></channel></rss>