If you must use a high-side current monitor, you could try a circuit like the one I have simulated below. It won't be accurate for input voltages near zero, but it is within 1% from 5 V to 35 V, for which I use a 15 V sine wave with 20 V DC offset.
The output voltage between R2 and R4 (a and b) equals the voltage on the 100 mΩ shunt R5 (Vin and Vout). It also works with a 10 mΩ shunt, but the error increases to about 5%-8% for common-mode voltages of less than 6 V. If you do this, you may need to tweak the values to get the performance you desire, and you will still need an amplifier with a gain of 30 to get the required signal to your ADC.
I was able to achieve about 1% error down to a range of 1 V to 39 V with a 10 mΩ shunt by using 975 Ω for R1 and R3, and 1 MΩ for R7.
I simulated the OP's circuit using an AD820 and 2N2222, and the output was basically slammed to the 24 V Vcc rail.
OK. Here is a practical circuit, although it also has some unwanted behavior, which might be due to the simulator. For one thing, the voltage across the shunt resistor should not be distorted (or go below zero).
I was not really satisfied with the last circuit, so I came up with the following, using a current mirror and a single op-amp. I also used a step function to test it for a range of power supply voltages. This still needs very close matching of the differential amplifier resistors:
I simulated the circuit provided by @emdura, and found problems with it. However, I used most of the same components and made some changes that work properly. The source follower MOSFET is not really necessary, but is provided in case higher output current is desired. At least this design does not depend on the value of the load resistor.