author ethereal Sat, 25 Jan 2020 05:47:37 +0000 (00:47 -0500) committer ethereal Sat, 25 Jan 2020 05:47:37 +0000 (00:47 -0500)

index 031cff5..c5b8611 100644 (file)
@@ -29,7 +29,7 @@ So, let's talk about one algorithm: the Fermat primality test.

The idea behind the so-called Fermat primality test is extremely simple, and
uses a theorem that gives the test its name:
-> ##### Fermat's Little Theorem
+> ### Fermat's Little Theorem
> Let <$p$> be a prime, and <$a$> an integer such that <$a \not |~ p$>. Then
> <$a^{p-1} \equiv 1 \mod p$>.

@@ -40,7 +40,7 @@ number <$n$> is not a prime, by the contrapositive of Fermat's Little Theorem.

Or, more formally:

-> #### Fermat Primality Test
+> ### Fermat Primality Test
> **Input**: Positive integer <$n \geq 2$>.
>
> **Output**: "Composite" or "Prime".
@@ -84,7 +84,7 @@ We seem to have a bit of a difficulty now. How can we determine if the Fermat
test lies for a given input? Well, here's a place to start. How about we define
the list of composite numbers for which a given <$a$> results in a Fermat lie?

-> #### Fermat liars
+> ### Fermat liars
> A number <$a$> is a Fermat liar for a composite number <$n$> iff
> <$a^{n-1} \equiv 1 \mod n$>. The set of Fermat liars for a composite positive
> integer <$n$> is the set
@@ -110,7 +110,7 @@ since <$F(n) \subseteq \mathbb{Z}_n$> by construction, we really note that

Here's a theorem to get you thinking:

-> ##### Lagrange's Theorem
+> ### Lagrange's Theorem
> Let <$G$> be a group, and <$H$> a subgroup of <$G$>. Then
> <$ord(H)~|~ord(G)$>.[^lagrange]

@@ -190,7 +190,7 @@ Carmichael numbers up to <$10^{12}$>, for the curious.

So, what is a Carmichael number, exactly?

-> #### Carmichael numbers
+> ### Carmichael numbers
> A Carmichael number is a positive integer <$n$> that satisfies:
>
> 1. <$n$> is composite,
@@ -200,7 +200,7 @@ So, what is a Carmichael number, exactly?
Here's a quick sketch of a proof of why Carmichael numbers defeat the Fermat
primality test, for completeness' sake:

-> #### Proof:
+> ### Proof:
> Let <$n$> be a Carmichael number. Then because <$n$> is composite, we know
> that for some primes <$p_1, \ldots, p_k$> and some positive integers
> <$e_1, \ldots, e_k$>, <latex>$n = \prod_{i=1}^{k} p_i^{e_i}$</latex>
index 86cf025..0ec3e75 100644 (file)
@@ -36,7 +36,7 @@ reasonable in context, especially given later passages such as:

Well. Let's see about that, shall we?

-### The calculation
+## The calculation

Let <$X$> be a random variable denoting the number of people in the Culture who
are Referers. We can then express <$X$> as a sum of indicator random variables
@@ -77,7 +77,7 @@ show the same side at least 90% of the time will be:
Supposedly, there are thirty or forty of these. How about ballparking the
probability of the existence of twenty Referers via a tail bound?

-### Tail-bound
+## Tail-bound

One way to state a Chernoff bound [^chernoff-cite] is that, for
<$X_1, \ldots, X_n$> independent Poisson trials,
@@ -100,7 +100,7 @@ for the probability of getting 20 such Referers -- we get that
And this is for 20. If you set the target to be 30 Referers instead, you find
that the probability is <$\leq 8.24 \times 10^{-144}$>.

-### Summary
+## Summary

At this point, I think it's safe to say that the analogy status is busted. The
concept of a Referer is an interesting one, and I don't actually think it's
index ed43fa6..14fc171 100644 (file)
@@ -15,7 +15,7 @@ startup environment that a program is given. Now it's time to _start_ talking
far in this article.

-### Overview
+## Overview

@@ -29,7 +29,7 @@ As I've insinuated before, the topic of dynamic linking is a _huge_ one. So,
how to begin the gargantuan task of describing it? Well, we'll start with
something kind of central: the .dynamic ELF section.

-### The .dynamic section
+## The .dynamic section

Remember how an ELF file is separated into different regions, called sections?
Any dynamically-linked ELF executable will have a section called .dynamic;
@@ -40,12 +40,12 @@ those functions can (probably) be found.

-### Investigating disassemblies
+## Investigating disassemblies

TODO: briefly talk about PLT, GOT, using implementations as reference

-### Summary
+## Summary

\- ethereal
index 56f89c3..73d545f 100644 (file)
@@ -28,6 +28,7 @@ Then ld.so can resolve the same-ness of libfoo.so.5 and libfoo.so.5.2
immediately without any fuss at all, simply by checking the inode -- after all,
if you follow the symlinks, you'll get the same inode.

-Quite clever, I think, and I'm mad at myself for not realizing this.
+Quite clever, I think, and I'm annoyed at myself for missing this the first
+time.

\- ethereal
index 3c924fc..d85064a 100644 (file)
@@ -8,12 +8,12 @@ same process as I.
On AT91SAM-series processors (in particular I'm using the SAM3N2A), the SPI
peripheral supports all four SPI modes (clock idle low/high, shift on
rising/falling edge), but the way it's addressed is a little odd. The two bits
-that control the SPI mode for a slave are the *CPOL* and *NCPHA* bits of the
-appropriate *SPI_CSRx* register, but the value of the *NCPHA* bit is the
-opposite of what you expect. So to set SPI mode 0,0 you use *CPOL = 0* and
-*NCPHA = 1*.
+that control the SPI mode for a slave are the CPOL and NCPHA bits of the
+appropriate SPI_CSRx register, but the value of the NCPHA bit is the
+opposite of what you expect. So to set SPI mode 0,0 you use CPOL = 0 and
+NCPHA = 1.

-Otherwise, when you write to a device expecting mode 0,0 everything will be
+Otherwise, when you write to a device expecting mode 0,0 everything will be
shifted by one bit. I ran into this with a 23LC1024 SRAM chip, where the first
byte of each SPI transfer is the opcode, i.e. reading/writing etc. As a result
of the shift, the opcode wasn't correct, and so reading returned 0xff for all